Wpf Datagrid列拖动指示器已剪裁

Wpf Datagrid列拖动指示器已剪裁,wpf,datagrid,visualbrush,Wpf,Datagrid,Visualbrush,编辑:Pavel已经表明这可能不是VisualBrush的错,所以我为我的具体问题重新命名了这个问题 示例是WPF数据网格; 向右滚动,直到列标题部分可见。 拖动部分可见的列标题以对其重新排序。 拖动指示器是收割台的局部视图(未完成) 我的解决方案-仍对其他解决方案感兴趣 我订阅了ColumnReordering并用我自己的替换了拖动指示器。 正在为我自己的类复制DataGridColumnFloatingHeader的源。 我将使用标题创建视觉画笔的行更改为使用标题的第一个子项(未剪裁)创建

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

示例是WPF数据网格; 向右滚动,直到列标题部分可见。 拖动部分可见的列标题以对其重新排序。 拖动指示器是收割台的局部视图(未完成)

我的解决方案-仍对其他解决方案感兴趣
我订阅了ColumnReordering并用我自己的替换了拖动指示器。 正在为我自己的类复制DataGridColumnFloatingHeader的源。 我将使用标题创建视觉画笔的行更改为使用标题的第一个子项(未剪裁)创建视觉画笔的行 删除偏移量并使用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>

公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
uiGrid.ItemsSource=newdictionary(){{“key1”,“val1”},{“key2”,“val2”};
}
}

问题一定与ScrollViewer有关。给你的网格一个itemssource,向右滚动直到一列显示一半,然后拖动它。瞧!如果您使用stackpanel,则不会删除内容,因为我已经用自己的实现(在列重新排序事件上)替换了该内部类,但是我仍然无法使其正常工作。
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

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

}