一、在后台创建的控件,用代码进行数据绑定,无法实现的问题。
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呢??? 是不是没法做成表达式???
使用数据绑定的方法,如何实现?

解决方案 »

  1.   

    对于问题一 我估计是因为你的button2没有name属性 
    所以你在 textblock1.SetBinding(Canvas.LeftProperty, new Binding() { Path = new PropertyPath("Canvas.LeftProperty"), ElementName = "button2" });会报错 
    说找不到button2
    对于问题二 我们一般情况下 不使用绑定来进行划线等图形操作
    直接重新绘制线段吧 这样比较简单粗暴
      

  2.   

    一、Name 我试过了,不是这个的问题。button2就是这个的x:Name,不是这个原因。
    二、绑定我觉得是最方便的,不需要在圆点被拖动的时候在鼠标事件中重新设定线的端点坐标。如果这样的话,还需要把被拖动的圆点,这个圆点关联的其他圆点,以及线都是用一些集合或者其他方法关联起来,很麻烦。还是求绑定方法。
    我新建一个pointInfo类,构造函数传递圆点进去,然后建立属性获取 各个坐标+r的值。然后建立一个绑定回调通知。 把这个pointInfo和圆点关联起来,在画线的时候从PointInfo类中的属性获得绑定可以么?
      

  3.   

    lz我不是很明白你想干什么,你的动机是不是想做一个类似ppt那种画框让后连线?
    如果是那样,你对wpf的理解的层面似乎还处于蛮夷阶段
    可以学习一下这个,http://www.codeproject.com/KB/WPF/WPFDiagramDesigner_Part1.aspx
      

  4.   

    可能是蛮夷阶段吧,呵呵。不过不是这个意思。
    想做的是类似omnipeek里面的peermap,捕获数据包,然后一个圆点代表一个IP,在有数据流通的IP之间连上线,圆点可以拖动,线也跟着动。所以我想把线的端点绑定在圆点的坐标上,不过要加上圆点的半径r。
    你懂的还有,第一个问题,知道为什么么?
      

  5.   

    1、button.registerName(string, control) 后台需要注册名字
    2、 可以用后台类解决,或者自定义控件。