如何处理WPF中Grid Splitter生成的事件?

RKM*_*RKM 9 wpf

我想要一个事件处理程序,当移动网格分割器时处理事件,我不确定是否有一个,如果没有,我想我可以在行的大小改变时生成一个事件?

谢谢.

Ed *_*tes 13

你可以改变行的大小,但GridSplitter本身就是一个Thumb,所以它有自己的事件,比如DragStarted和DragCompleted.更多细节在这里.

编辑:如果您使GridSplitter可调焦并允许其使用键盘移动,请阅读Benlitz的答案以获取更多信息.


Ben*_*itz 7

我没有测试过,但我很确定如果您使用键盘箭头调整行/列的大小(通过将焦点放在网格分割器上),AresAvatar当前接受的答案将不起作用.这是您应该在应用程序中预期的罕见但可能的情况.

当电网分离器被移动(或者通过拖放或使用键盘箭头),它改变了Width/ Height的依赖性属性ColumnDefinitions/ RowDefinitions网格的.您可以在此属性更改上轻松注册处理程序:

var heightDescriptor = DependencyPropertyDescriptor.FromProperty(RowDefinition.HeightProperty, typeof(ItemsControl));
heightDescriptor.AddValueChanged(myGrid.RowDefinitions[0], HeightChanged);
Run Code Online (Sandbox Code Playgroud)

(例如,此片段将跟踪网格第一行中的大小更改).

然后,您可以处理在每种情况下都适用的处理程序中的resize.

private void HeightChanged(object sender, EventArgs e)
{
    // TODO: handle row resize
}
Run Code Online (Sandbox Code Playgroud)

通常,建议不要依赖用户输入操作(鼠标拖动,键盘输入......)来处理逻辑或可视动作/事件,因为几乎总有几种方法可以使用不同的输入执行相同的操作(鼠标,键盘,触摸屏,易用工具......).