社区
WPF/Silverlight
帖子详情
MouseDragElementBehavior与GridSplitter事件冲突?
dui_cky
2010-07-30 09:54:51
RT: 在一个border中加了个MouseDragElementBehavior和一个含有GridSplitter的Grid。
把鼠标箭头放在border 外边框的时候可以移动这个GRID,把鼠标箭头移动到GRID中行列线GridSplitter时也
变成移动这个GRID,而不能改变行列大小了? 求解! 我要的效果是外面可移动这个GRID,里面可以改变行列大小。
...全文
138
6
打赏
收藏
MouseDragElementBehavior与GridSplitter事件冲突?
RT: 在一个border中加了个MouseDragElementBehavior和一个含有GridSplitter的Grid。 把鼠标箭头放在border 外边框的时候可以移动这个GRID,把鼠标箭头移动到GRID中行列线GridSplitter时也 变成移动这个GRID,而不能改变行列大小了? 求解! 我要的效果是外面可移动这个GRID,里面可以改变行列大小。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
dui_cky
2010-08-01
打赏
举报
回复
额,搞定了,大恩不言谢 ,小恩还是要使劲的感谢。。。
Grid g = (Grid)b.Child;
UIElementCollection gc = g.Children;
for (int gi = 0; gi < gc.Count; gi++)
{
if (gc[gi].ToString() == "System.Windows.Controls.TextBox")
{
TextBox t = (TextBox)gc[gi];
str += "<textbox row='" + t.GetValue(Grid.RowProperty).ToString() + "' column='" + t.GetValue(Grid.ColumnProperty).ToString() + "' > " +
"<Content>" + t.Text + "</Content> \n\t" +
"</textbox> \n\t ";
}
}
jv9
2010-08-01
打赏
举报
回复
[Quote=引用 4 楼 dui_cky 的回复:]
第一个问题解决了,是通过 Grid item = sender as Grid;
Interaction.GetBehaviors(item.Parent).Clear();
把border的 行为先移除 , 然后再添加就能实现了 。
还有个 问题 如何获取 grid中特定行列中的元素控件?
[/Quote]
可以参考这篇文章获取控件内子控件,和模板内控件:
http://www.silverlightchina.net/html/tips/2010/0627/1342.html
http://www.silverlightchina.net/html/tips/2010/0510/1109.html
dui_cky
2010-07-31
打赏
举报
回复
动态添加 m_l 行值 n_r列值 每个单元格中放 textbox
Border border = new Border();
Grid grid = new Grid();
for (int i = 0; i < m_l; i++)
{
grid.RowDefinitions.Insert(i, new RowDefinition() { Height = new GridLength(50) });
}
for (int j = 0; j < n_r; j++)
{
grid.ColumnDefinitions.Insert(j, new ColumnDefinition() { Width = new GridLength(100) });
}
for (int k = 0; k < m_l; k++)
for (int n = 0; n < n_r; n++)
{
TextBox txt = new TextBox();
txt.SetValue(Grid.RowProperty, k);//定义所在行
txt.SetValue(Grid.ColumnProperty, n);//定义所在列
grid.Children.Add(txt);
txt.AcceptsReturn = true;
if (n < n_r - 1)
{
GridSplitter gs = new GridSplitter();
gs.HorizontalAlignment = System.Windows.HorizontalAlignment.Right;
gs.VerticalAlignment = System.Windows.VerticalAlignment.Stretch;
gs.Width = 2;
gs.SetValue(Grid.RowProperty, k);
gs.SetValue(Grid.ColumnProperty, n);
gs.SetValue(Grid.ColumnSpanProperty, 1);
grid.Children.Add(gs);
}
if (k != 0)
{
GridSplitter gs1 = new GridSplitter();
gs1.VerticalAlignment = System.Windows.VerticalAlignment.Top;
gs1.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch;
gs1.BorderThickness = new Thickness(1);
gs1.SetValue(Grid.RowSpanProperty, 1);
gs1.Height = 2;
gs1.SetValue(Grid.RowProperty, k);
gs1.SetValue(Grid.ColumnProperty, n);
grid.Children.Add(gs1);
}
}
border.Child = grid;
border.Margin = new Thickness(50, 100, 0, 0);
//下面为border 添加 拖拽行为
MouseDragElementBehavior mdeb = new MouseDragElementBehavior();
mdeb.ConstrainToParentBounds = true;
Interaction.GetBehaviors(border).Add(mdeb);
问题是这样的,整个border边框 拖拽 没问题 , 里面行列边框中的GridSplitter 用鼠标选中改变大小的功能
变成了移动。(注:选中GridSplitter 后 鼠标改变单元格大小失灵,但是用键盘中上下左右可以改变大小)。
dui_cky
2010-07-31
打赏
举报
回复
第一个问题解决了,是通过 Grid item = sender as Grid;
Interaction.GetBehaviors(item.Parent).Clear();
把border的 行为先移除 , 然后再添加就能实现了 。
还有个 问题 如何获取 grid中特定行列中的元素控件?
dui_cky
2010-07-31
打赏
举报
回复
还有个 问题 如何获取 grid中特定行列中的元素控件?
jv9
2010-07-30
打赏
举报
回复
你的Grid是如何定义的?使用了固定的数值么?能把你代码贴出来看看么?
Grid
Split
ter
7. **
事件
处理**:虽然`
Grid
Split
ter
`本身不触发任何直接的大小更改
事件
,但你可以监听`SizeChanged`
事件
来响应`
Grid
`的大小变化,或者通过监视`LayoutUpdated`
事件
来跟踪布局更新。 在实际项目中,你可能会遇到...
[WPF] 使用
Grid
与
Grid
Split
ter
排版布局
使用
Grid
Split
ter
的一个关键点是,必须确保
Grid
Split
ter
旁边的列定义至少有一个使用"Auto",以便其大小可以由
Grid
Split
ter
调整。在这种情况下,第一列的宽度被设置为"Auto",而第二列的宽度为"*",因此当用户拖动...
WPF之
Grid
Split
ter
3. **样式和模板**:可以自定义
Grid
Split
ter
的样式和模板,以改变其外观和行为,使其与应用程序的整体设计保持一致。 总的来说,
Grid
Split
ter
是WPF中一个强大的布局工具,通过巧妙地使用Resize
Behavior
属性和适当的...
vs2010 wpf
Grid
Grid
Split
ter
布局 分割
5. **响应拖动
事件
**:当用户拖动`
Grid
Split
ter
`时,需要监听`SizeChanged`
事件
,并在
事件
处理程序中更新受影响的行或列的大小。 在`用
Grid
和
Grid
Split
ter
布局和分割.doc`文档中,可能会包含具体的示例代码和详细...
wpf
Grid
Split
ter
拖动分隔
Grid
源码
接下来,在后台代码(通常是`MainWindow.xaml.cs`)中,你可能需要处理`
Grid
Split
ter
`的`
Drag
Delta`
事件
,以便在用户拖动`
Grid
Split
ter
`时更新`
Grid
`的列宽或行高。以下是一个简单的示例: ```csharp private void...
WPF/Silverlight
8,756
社区成员
12,030
社区内容
发帖
与我相关
我的任务
WPF/Silverlight
WPF/Silverlight相关讨论
复制链接
扫一扫
分享
社区描述
WPF/Silverlight相关讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章