请教两个问题,都是和WPF的数据绑定相关的,求解答

fighter_yy 2012-10-16 08:09:34
一、在后台创建的控件,用代码进行数据绑定,无法实现的问题。
xaml中创建button1,建立按钮事件;后台窗口构造函数中创建button2和textblock,button2建立按钮事件。
在button1事件中把textblock的left坐标绑定到button1的left坐标,可以实现。
在button2事件中把textblock的left坐标绑定到button2的left坐标,无法实现。
非常困惑,求解。代码如下:
<Canvas x:Name ="canvas1">
<Button Canvas.Left="159" Canvas.Top="90" Content="Button" Height="23" Name="button1" Width="75" Click="button1_Click" />
</Canvas>
后台代码:
Button button2;
TextBlock textblock1;
public MainWindow()
{
InitializeComponent();

button2 = new Button();
Canvas.SetLeft(button2,(double)200);
Canvas.SetTop(button2,(double)200);
button2.Width = 50;
button2.Height = 25;
button2.Content = "button";
canvas1.Children.Add(button2);
button2.Click += new RoutedEventHandler(button2_Click);

textblock1 = new TextBlock();
textblock1.Text = "fdfdsfsd";
canvas1.Children.Add(textblock1);
}

private void button2_Click(object sender, RoutedEventArgs e)
{
textblock1.SetBinding(Canvas.LeftProperty, new Binding() { Path = new PropertyPath("Canvas.LeftProperty"), ElementName = "button2" });
}

private void button1_Click(object sender, RoutedEventArgs e)
{
textblock1.SetBinding(Canvas.LeftProperty, new Binding() { Path = new PropertyPath(Canvas.LeftProperty), ElementName = "button1" });
}

二、需要在后台代码中动态添加很多圆点和线。当添加两个圆点的时候,需要在这两个圆点之间连上线。
目标:在人员操作软件的时候,可以鼠标拖动圆点,同时线也可以同时移动。
所以,就需要把线的端点坐标绑定到两个圆点的圆心上。
假设,圆点是P1,P2,半径即圆点width的一半为r。所以绑定的时候端点left和top坐标就应该是对应圆点的left+r和top+r。
在line.setBinding 中将x1,y1,x2,y2分别绑定,怎么能把 圆点的 坐标 加上 r 赋给path呢??? 是不是没法做成表达式???
使用数据绑定的方法,如何实现?
...全文
220 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fighter_yy 2012-11-09
  • 打赏
  • 举报
回复
registerName 正解
shmilyoo0 2012-11-09
  • 打赏
  • 举报
回复
1、button.registerName(string, control) 后台需要注册名字 2、 可以用后台类解决,或者自定义控件。
fighter_yy 2012-10-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

lz我不是很明白你想干什么,你的动机是不是想做一个类似ppt那种画框让后连线?
如果是那样,你对wpf的理解的层面似乎还处于蛮夷阶段
可以学习一下这个,http://www.codeproject.com/KB/WPF/WPFDiagramDesigner_Part1.aspx
[/Quote]
可能是蛮夷阶段吧,呵呵。不过不是这个意思。
想做的是类似omnipeek里面的peermap,捕获数据包,然后一个圆点代表一个IP,在有数据流通的IP之间连上线,圆点可以拖动,线也跟着动。所以我想把线的端点绑定在圆点的坐标上,不过要加上圆点的半径r。
你懂的。。。

还有,第一个问题,知道为什么么?
nonocast 2012-10-17
  • 打赏
  • 举报
回复
lz我不是很明白你想干什么,你的动机是不是想做一个类似ppt那种画框让后连线?
如果是那样,你对wpf的理解的层面似乎还处于蛮夷阶段
可以学习一下这个,http://www.codeproject.com/KB/WPF/WPFDiagramDesigner_Part1.aspx
fighter_yy 2012-10-16
  • 打赏
  • 举报
回复
睡了,明天来看
fighter_yy 2012-10-16
  • 打赏
  • 举报
回复
别沉啊
fighter_yy 2012-10-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

对于问题一 我估计是因为你的button2没有name属性
所以你在 textblock1.SetBinding(Canvas.LeftProperty, new Binding() { Path = new PropertyPath("Canvas.LeftProperty"), ElementName = "button2" });会报错
说找不到button2


对于问题二……
[/Quote]
一、Name 我试过了,不是这个的问题。button2就是这个的x:Name,不是这个原因。
二、绑定我觉得是最方便的,不需要在圆点被拖动的时候在鼠标事件中重新设定线的端点坐标。如果这样的话,还需要把被拖动的圆点,这个圆点关联的其他圆点,以及线都是用一些集合或者其他方法关联起来,很麻烦。还是求绑定方法。
我新建一个pointInfo类,构造函数传递圆点进去,然后建立属性获取 各个坐标+r的值。然后建立一个绑定回调通知。 把这个pointInfo和圆点关联起来,在画线的时候从PointInfo类中的属性获得绑定可以么?
lhx527099095 2012-10-16
  • 打赏
  • 举报
回复
对于问题一 我估计是因为你的button2没有name属性
所以你在 textblock1.SetBinding(Canvas.LeftProperty, new Binding() { Path = new PropertyPath("Canvas.LeftProperty"), ElementName = "button2" });会报错
说找不到button2


对于问题二 我们一般情况下 不使用绑定来进行划线等图形操作
直接重新绘制线段吧 这样比较简单粗暴

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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