MouseDragElementBehavior与GridSplitter事件冲突?

dui_cky 2010-07-30 09:54:51
RT: 在一个border中加了个MouseDragElementBehavior和一个含有GridSplitter的Grid。

把鼠标箭头放在border 外边框的时候可以移动这个GRID,把鼠标箭头移动到GRID中行列线GridSplitter时也
变成移动这个GRID,而不能改变行列大小了? 求解! 我要的效果是外面可移动这个GRID,里面可以改变行列大小。
...全文
133 6 打赏 收藏 转发到动态 举报
写回复
用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是如何定义的?使用了固定的数值么?能把你代码贴出来看看么?

8,731

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧