3

編集:Pavel は、VisualBrush のせいではない可能性があることを示したので、特定の問題の質問の名前を変更しました。

例は WPF Datagrid です。列ヘッダーが部分的に表示されるまで右にスクロールします。部分的に表示されている列ヘッダーをドラッグして並べ替えます。ドラッグ インジケーターはヘッダーの部分ビューです (完全ではありません)。

私の解決策
- ColumnReordering にサブスクライブし、ドラッグ インジケーターを独自のものに置き換えて、他のソリューションにまだ興味が あります。自分のクラスの DataGridColumnFloatingHeader のソースをコピーします。ヘッダーを使用してビジュアル ブラシを作成する行を、ヘッダーの最初の子 (クリップされていない) を使用してビジュアル ブラシを作成する行に変更し、オフセットを削除して 0,0.. を使用します。

4

1 に答える 1

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" } };
    }

}
于 2011-12-21T14:25:45.903 に答える