社区
WPF/Silverlight
帖子详情
MouseDragElementBehavior与GridSplitter事件冲突?
dui_cky
2010-07-30 09:54:51
RT: 在一个border中加了个MouseDragElementBehavior和一个含有GridSplitter的Grid。
把鼠标箭头放在border 外边框的时候可以移动这个GRID,把鼠标箭头移动到GRID中行列线GridSplitter时也
变成移动这个GRID,而不能改变行列大小了? 求解! 我要的效果是外面可移动这个GRID,里面可以改变行列大小。
...全文
133
6
打赏
收藏
MouseDragElementBehavior与GridSplitter事件冲突?
RT: 在一个border中加了个MouseDragElementBehavior和一个含有GridSplitter的Grid。 把鼠标箭头放在border 外边框的时候可以移动这个GRID,把鼠标箭头移动到GRID中行列线GridSplitter时也 变成移动这个GRID,而不能改变行列大小了? 求解! 我要的效果是外面可移动这个GRID,里面可以改变行列大小。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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是如何定义的?使用了固定的数值么?能把你代码贴出来看看么?
[WPF] 使用
Grid
与
Grid
Split
ter
排版布局
[WPF] 使用
Grid
与
Grid
Split
ter
排版布局,喜欢的话可以下载看下。
WPF的
grid
split
ter
分割线的大型demo
自己学习WPF中
Grid
split
ter
控件的时候写的一个例子,方便开发者理解WPF中的UI布局中父控件和子控件和控件属性VerticalAlignment和HorizontalAlignment取不同值时候,分割线的不同用法,分割线功能由用户操作来展示出...
WPF之
Grid
Split
ter
WPF WPF之
Grid
Split
ter
学习WPF 使用鼠标来控制布局的大小还是不错的哦,针对普通情况和特殊情况对
Grid
Split
ter
进行讲解
wpf
Grid
Split
ter
拖动分隔
Grid
源码
wpf编程 拖动
Grid
Split
ter
实现分隔
Grid
,环境是vs2015,源码下载
Grid
Split
ter
Grid
Split
ter
WPF分隔条的使用。。
WPF/Silverlight
8,731
社区成员
12,028
社区内容
发帖
与我相关
我的任务
WPF/Silverlight
WPF/Silverlight相关讨论
复制链接
扫一扫
分享
社区描述
WPF/Silverlight相关讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章