Индикатор перетаскивания столбца данных обрезается - PullRequest
3 голосов
/ 20 декабря 2011

Редактировать: Павел показал, что это может быть не ошибка VisualBrush, поэтому я переименовал вопрос для моей конкретной проблемы.

В качестве примера приведен WPF Datagrid;Прокрутите вправо, пока заголовок столбца не станет частично видимым.перетащите частично видимый заголовок столбца, чтобы изменить его порядок.индикатор перетаскивания является частичным представлением заголовка (не завершено)

My Solution - все еще заинтересованы в других решенияхЯ подписываюсь на ColumnReordering и заменяю индикатор перетаскивания своим собственным.Копирование источника DataGridColumnFloatingHeader для моего собственного класса.Я изменяю строку, которая создает визуальную кисть, используя заголовок, на строку, которая создает визуальную кисть, используя первый дочерний элемент заголовка (который не обрезается), удаляет смещение и использует 0,0 ..

1 Ответ

0 голосов
/ 21 декабря 2011

Редактировать

Я считаю, что это ошибка в реализации 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" } };
    }

}
...