【发布时间】:2014-08-03 09:58:53
【问题描述】:
我有一个在网格上排列模板项目的 UserControl(基于this 问题的答案)。现在我想让该网格的列/行可调整大小。
现在,我有一些技巧可以检测鼠标事件并计算用户是否在边框附近单击。如果是这样,它会调整相应的列。这主要是可行的,但是我遇到了相对较慢的 MouseMove 事件触发问题,这使得用户很难在正确的位置单击。此外,我无法扩大最后一行/列的大小,因为鼠标现在移动到我无法跟踪的控制区域之外(尽管我可能会通过更多工作来解决这个问题)。
更好的解决方案是将 GridSplitters 添加到每一列/行。问题是,我的 UserControl 使用 ItemsControl 和 DataTemplate 来创建项目,所以我在弄清楚如何添加拆分器时遇到了麻烦。我可以修改用户定义的模板吗?有没有其他方法可以添加拆分器?
* 编辑 *
这是我想做的一个例子(如果网格单元是手动定义的,而不是通过 ItemsControl)。请注意,此示例仍然没有解决调整最后一行大小的问题。
<Grid
Grid.Row="2" Grid.Column="1"
>
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition Height="30"/>
<RowDefinition Height="30"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBox Text="Row 0" Grid.Row="0"/>
<GridSplitter
Grid.Row="0"
Height="5"
HorizontalAlignment="Stretch"
VerticalAlignment="Bottom"
Background="Transparent"/>
<TextBox Text="Row 1" Grid.Row="1"/>
<GridSplitter
Grid.Row="1"
Height="5"
HorizontalAlignment="Stretch"
VerticalAlignment="Bottom"
Background="Transparent"/>
<TextBox Text="Row 2" Grid.Row="2"/>
<GridSplitter
Grid.Row="2"
Height="5"
HorizontalAlignment="Stretch"
VerticalAlignment="Bottom"
Background="Transparent"/>
</Grid>
【问题讨论】:
-
你能发布同样的 XAML 吗?如果也有示例图像,我们将不胜感激。
-
不确定我是否完全了解您要查找的 XAML。我加了一个……这涵盖了吗?
-
用户控件中是否定义了网格?您可以发布定义网格的控件的 XAML 吗?
-
网格是动态定义的。最简单的参考代码是查看我帖子顶部链接中接受的答案。
标签: wpf grid gridsplitter