Question

Edit: Pavel has shown that it may not be VisualBrush's fault so I have renamed the question for my specific problem.

The example is a WPF Datagrid; Scroll right until a column header is partially visible. drag the partially visible column header to reorder it. the drag indicator is the partial view of the header (not complete)

My Solution - Still interested in other solutions
I subscribe to ColumnReordering and replace the drag indicator with my own. Copying the source of DataGridColumnFloatingHeader for my own class. I change the line that creates the visual brush using the header, to a line that creates the visual brush using the first child of the header (which is not clipped) remove the offset and use 0,0..

Was it helpful?

Solution

Edit

I believe it is a bug in DataGrid implementation. I suggest you scroll on column start to avoid such unwanted behaviour if it really treats you.

IMHO problem itself is in System.Windows.Controls.DataGridColumnFloatingHeader. Due this class is internal it is hard to workaround the problem.

How to reproduce:

Scroll a bit right, than drag first column.

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

}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top