Datagrid 列拖动指示器被剪裁

发布于 2024-12-22 05:20:11 字数 331 浏览 1 评论 0原文

编辑:帕维尔已经表明这可能不是 VisualBrush 的错,因此我已针对我的具体问题重命名了该问题。

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

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

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..

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

终止放荡 2024-12-29 05:20:11

编辑

我相信这是 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" } };
    }

}

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

}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文