none
wpf DataGridColumnHeader样式能左右拖动的问题 RRS feed

  • 问题

  • DataGrid中有人动态创建过列吗?并且标题栏可以拖动?

    如果通过后台datagrid.columns.add方法添加的列,标题栏表示没有问题,问题是鼠标移动到标题栏不可以左右拖动。

    如果在xaml中这样写死列:

    <DataGrid AutoGenerateColumns="False" Name="dataGrid1">

    <DataGrid.Columns>

    <DataGridTemplateColumn Header="Test1" Width="50" />

    <DataGridTemplateColumn Header="Test2" Width="100" />

     <DataGridTemplateColumn Header="Test3" Width="50" />

    <DataGridTemplateColumn Header="Test4" Width="50" />

    <DataGridTemplateColumn Header="Test5" Width="50" />

    </DataGrid.Columns>

    </DataGrid>

    鼠标移动到标题栏可以左右拖动,我用的是同一个DataGridColumnHeader样式。除了不能拖动以外,其他功能都一样。


    2011年7月22日 9:25

答案

  • 你好,

    在后台代码中添加的列并不会与在XAML中创建的列有所不同。应该仍然是可以拖动的。

    例如在一个新的WPF项目中添加下面的代码。

      <StackPanel>
        <Button Content="Add" Click="Button_Click"/>
        <DataGrid AutoGenerateColumns="False" Name="dataGrid1">
          <DataGrid.Columns>
            <DataGridTemplateColumn Header="Test1" Width="50" />
            <DataGridTemplateColumn Header="Test2" Width="100" />
            <DataGridTemplateColumn Header="Test3" Width="50" />
            <DataGridTemplateColumn Header="Test4" Width="50" />
            <DataGridTemplateColumn Header="Test5" Width="50" />
          </DataGrid.Columns>
        </DataGrid>
      </StackPanel>
    

        private void Button_Click(object sender, RoutedEventArgs e)
        {
          dataGrid1.Columns.Add(new DataGridTemplateColumn() { Header = "NewColumn" });
        }
    

    点击Add按钮添加的列可以正常拖动。

     

    如果你仍然不能解决你的问题,请具体的介绍一下情况,如果可能的话,最好提供一个能够重新问题的代码。这样我们可以一起帮你找一下原因。

     


    Min Zhu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 xxyxxb2080 2011年7月25日 9:17
    2011年7月25日 7:46
    版主

全部回复

  • 你好,

    在后台代码中添加的列并不会与在XAML中创建的列有所不同。应该仍然是可以拖动的。

    例如在一个新的WPF项目中添加下面的代码。

      <StackPanel>
        <Button Content="Add" Click="Button_Click"/>
        <DataGrid AutoGenerateColumns="False" Name="dataGrid1">
          <DataGrid.Columns>
            <DataGridTemplateColumn Header="Test1" Width="50" />
            <DataGridTemplateColumn Header="Test2" Width="100" />
            <DataGridTemplateColumn Header="Test3" Width="50" />
            <DataGridTemplateColumn Header="Test4" Width="50" />
            <DataGridTemplateColumn Header="Test5" Width="50" />
          </DataGrid.Columns>
        </DataGrid>
      </StackPanel>
    

        private void Button_Click(object sender, RoutedEventArgs e)
        {
          dataGrid1.Columns.Add(new DataGridTemplateColumn() { Header = "NewColumn" });
        }
    

    点击Add按钮添加的列可以正常拖动。

     

    如果你仍然不能解决你的问题,请具体的介绍一下情况,如果可能的话,最好提供一个能够重新问题的代码。这样我们可以一起帮你找一下原因。

     


    Min Zhu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 xxyxxb2080 2011年7月25日 9:17
    2011年7月25日 7:46
    版主
  • 谢谢,通过你的方法我找到原因了;我在xaml中设置了一个属性导致不能拖动;

    但是现在有另外一个问题;我想把GridViewColumnHeader的样式做成和DataGridColumnHeader的样式一样;请问怎么设置?我的代码如下,这也是我的DataGridColumnHeader的样式,这样设置给GridViewColumnHeader的列也不能拖动了;请问是什么原因?

     <Style TargetType="{x:Type GridViewColumnHeader}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type GridViewColumnHeader}">
                        <Grid>
                            <toolkit:DataGridHeaderBorder BorderBrush="{TemplateBinding BorderBrush}"
                                                          x:Name="dgHeaderBorder"
                                                        BorderThickness="{TemplateBinding BorderThickness}"
                                                        Background="{TemplateBinding Background}"
                                                        IsPressed="{TemplateBinding IsPressed}"
                                                        IsHovered="{TemplateBinding IsMouseOver}"
                                                        Padding="{TemplateBinding Padding}" >
                                <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                                SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
                                                VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                                  Margin="4,0,4,0"/>
                            </toolkit:DataGridHeaderBorder>

                            <!--Style="{DynamicResource ColumnHeaderGripperStyle}"-->
                            <Thumb x:Name="PART_RightHeaderGripper"
                                   Cursor="SizeWE"
                                HorizontalAlignment="Right"
                                Background="{DynamicResource {ComponentResourceKey localCodes:HedmSkins, WindowButtonPenColor}}"
                                   Width="1"
                                   Height="15"
                                   VerticalAlignment="Center" >
                                <Thumb.BitmapEffect>
                                    <DropShadowBitmapEffect Color="#000"
                                                            Direction="-90" ShadowDepth="2" Softness="0.1" Opacity="0.3" />
                                </Thumb.BitmapEffect>
                            </Thumb>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

    2011年7月25日 7:54
  • 上面的问题把PART_RightHeaderGripper改为PART_HeaderGripper就可以实现拖动了;但是Cursor="SizeWE"
    在2中种控件上面表示不一样。能改为一致吗?

    • 已标记为答案 xxyxxb2080 2011年7月25日 8:39
    • 取消答案标记 xxyxxb2080 2011年7月25日 9:16
    2011年7月25日 8:33
  • 你好,

    我试了一下并不能重现这个问题。应用这个Style之后GridView的Header仍然可以正常拖动并交换顺序。

    建议你还是试着简化一下问题并尝试提供一个能够重现问题的示例。

    另外,建议你为这个新问题另开一个新帖。我们鼓励每个帖子只集中讨论一个问题,这样可以使讨论更集中,并方便其他用户搜索问题和回答。

    谢谢。


    Min Zhu [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.


    2011年7月25日 8:34
    版主
  • 谢谢Min Zhu

    按照我上面的style应该是不能拖动列的;除非把PART_RightHeaderGripper改为PART_HeaderGripper才能拖动;我已经发了新帖了;

    非常感谢你的回答。

    2011年7月25日 8:49