Datagrid列拖动指示器被剪裁

时间:2011-12-20 10:07:45

标签: wpf datagrid visualbrush

编辑:Pavel已经证明它可能不是VisualBrush的错,所以我已经为我的具体问题重命名了这个问题。

示例是WPF Datagrid; 向右滚动,直到列标题部分可见。 拖动部分可见的列标题以重新排序。 拖动指示器是标题的部分视图(未完成)

我的解决方案 - 仍然对其他解决方案感兴趣
我订阅了ColumnReordering并用我自己的替换拖动指示器。 为我自己的类复制DataGridColumnFloatingHeader的源代码。 我使用标题将创建可视画笔的行更改为使用标题的第一个子项(未剪切)创建可视画笔的行 删除偏移并使用0,0 ..

1 个答案:

答案 0 :(得分:0)

修改

我认为这是DataGrid实现中的一个错误。我建议你滚动列开始,以避免这种不必要的行为,如果它真的对待你。

恕我直言问题本身在System.Windows.Controls.DataGridColumnFloatingHeader。由于此类是内部的,因此很难解决问题。

如何重现:

向右滚动,而不是拖动第一列。

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="400" Width="300">

    <ScrollViewer x:Name="uiScroll">
        <DataGrid Grid.Row="3" x:Name="uiGrid">
            <DataGrid.Columns>
                <DataGridTextColumn Width="200" Header="Test 1" Binding="{Binding Key}" />
                <DataGridTextColumn Width="200" Header="Test 2" Binding="{Binding Value}" />
            </DataGrid.Columns>
        </DataGrid>
    </ScrollViewer>

</Window>

...

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        uiGrid.ItemsSource = new Dictionary<string, string>() { { "key1", "val1" }, { "key2", "val2" } };
    }

}