【C#/WPF】限制GridSplitter分隔栏的滑动范围
来源:互联网 发布:迷宫生成算法 递归 编辑:程序博客网 时间:2024/05/21 11:27
GridSplitter可以自由滑动,例如一个水平方向的分隔栏,可以从屏幕顶端滑到屏幕底端。
现在的需求是:限制GridSplitter在一定范围内滑动。
例如,现在有如下的横竖两个GridSplitter分隔栏。
<Grid> <Grid.RowDefinitions/> <Grid.ColumnDefinitions> <ColumnDefinition/> <ColumnDefinition Width="10"/> <ColumnDefinition/> </Grid.ColumnDefinitions> <TextBlock Grid.Row="0" Grid.Column="0" Text="LLLLLLLLLLLLLL"/> <GridSplitter Grid.Row="0" Grid.Column="1" Width="10" HorizontalAlignment="Center" VerticalAlignment="Stretch" Background="Wheat" DragDelta="GridSplitter_DragDelta"/> <Grid Grid.Row="0" Grid.Column="2"> <Grid.RowDefinitions> <RowDefinition/> <RowDefinition Height="10"/> <RowDefinition/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition/> </Grid.ColumnDefinitions> <TextBlock Grid.Row="0" Grid.Column="0" Text="RRRRRRTTTTTTTT"/> <GridSplitter Grid.Row="1" Grid.Column="0" Height="10" HorizontalAlignment="Stretch" Background="Wheat"/> <TextBlock Grid.Row="2" Grid.Column="0" Text="RRRRRRBBBBBBBB"/> </Grid></Grid>
运行起来效果如下:
目标:
- 尝试限制右侧的水平分隔栏的垂直方向滑动范围。
思路:
- 之前一直是尝试动态获取右侧上下两个部分的Height或ActualHeight,并在分隔符的滑动事件中进行处理。
private void sculptMaterialTab_GridSplitter_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e){ if () ....}
比如在初始化时先获得上下部分的默认高度,然后滑动中动态判断,超过临界值则禁止滑动。
后来发现,MVVM下就算把右侧上下两部分分别用一个Grid进行包裹,也无法初始化时获得这两个Grid的正确高度。也许是因为MVVM的初始化数据要优先于界面渲染,导致此时获取的Height是NaN而ActualHeight为0。
后来谷歌后看到另一种思路:
- 其实限制GridSplitter分隔栏的滑动范围,不是动态限制它两侧Grid的宽或高,而是应该限制它所在的Grid的RowDefinitions或ColumnDefinition的最小/最大宽或高!
给右侧上下两部分设置最小高度即可!
<Grid.RowDefinitions> <RowDefinition MinHeight="200"/> <RowDefinition Height="10"/> <RowDefinition MinHeight="200"/></Grid.RowDefinitions>
重要的参考:
https://blog.onedevjob.com/2012/01/16/gridsplitters-part-3-limiting-the-range-of-a-gridsplitter/
0 0
- 【C#/WPF】限制GridSplitter分隔栏的滑动范围
- 【C#/WPF】GridSplitter 分割布局,拖拽控件分隔栏以改变控件尺寸
- WPF教程(三十二)GridSplitter分割线
- wpf GridSplitter
- WPF:关于GridSplitter的一些说明
- WPF:关于GridSplitter的一些说明
- WPF中GridSplitter控件的使用
- WPF实现科拖拽分隔栏
- 【LabVIEW小技巧】LabVIEW分隔栏的妙用
- Wpf GridSplitter usage Sample
- wpf 中限制鼠标移动范围 win
- 一个最简单的js左右div分隔栏拖拽例子
- Android开发之ListView实现不同品种分类分隔栏的效果(非ExpandableListView实现)
- Android开发之ListView实现不同品种分类分隔栏的效果(非ExpandableListView实现)
- 页面分隔栏显示隐藏代码
- GridSplitter的使用
- [WPF] 使用Grid与GridSplitter排版布局
- Oracle varchar2的范围限制
- phpcms更改模块信息问题
- 如何使用OSS更省钱!
- 深入理解SELinux/SEAndroid 第二部分
- Nginx反向代理,负载均衡,redis session共享,keepalived高可用
- 如何使用Servlet监听器实现网站在线人数统计
- 【C#/WPF】限制GridSplitter分隔栏的滑动范围
- excel统计表格数量COUNTIF
- 字符串方法
- flex布局的注意事项
- weasis事件机制分析
- socks代理服务器协议的说明
- 用C语言实现一个简单的双色球模拟器
- Redis执行Lua脚本详细实例
- Unity中关于transform.root和transform.parent的区别和联系?