Binding并不是dynamic binding,它不能引用后加在的对象。实际上你可以单独设计一个view model,让你的Button1跟这个usercontrol一同使用一个DataContext。通过写<UserControl ......... >
    <UserControl.DataContext>
       <local:MyModel x:Name="MyContext" />
    </UserControl.DataContext>
    <Grid >
      .......
多个控件绑定到这个MyContext(或者其属性对象),而控件之间根本不直接关联。

解决方案 »

  1.   

    MVVM模式是这样的,你的ViewModel可以是从xaml中抽取出来的任意“数据”的集合,包括业务使用的数据也可以包括View使用的数据。例如可能就是public class MyModel: INotifyPropertyChanged
    {
        public string 名称1
        {
          set{ ..... }
        .......
        public Rectangle 用户拖放大小
        {
          set{ ....... }
        ........
    }然后,你的两个Button的宽度都可以跟“名称1”绑定起来,同时提供一个converter将“名称1”字符串计算出应该显示的宽度,这样当设置这个“名称1”时两个button的width同时会发生改变;而你的用户控件的Width则跟“用户拖放大小”绑定起来,同时提供一个converter将Rectangle 类型对象中的width取出来。
      

  2.   

    感谢楼上这位大师给的MVVM模式。
    不过,我现在想问的问题不是这个,这个例子也是我随便举的,我就想弄明白为什么在UserControl中设置DataContext为什么不行呢,如果像你所说的那样,不能绑定为加载的对象,那么,我试了一下,把上面代码的放到Window中,却是行得通的,在Window标签中设置DataContext,也照样能够绑定。
    有更好的答案吗?
      

  3.   

    button2的width属性绑定到button1的Width属性上?你确定你button2绑定了值?  你的button2的Width="{Binding}" 
      

  4.   

    当然啊。我都说了,只是把DataContext语句放到Grid标签中,就没有任何问题。但是放到UserControl里面,为什么就不行呢?
      

  5.   

    不知是不是跟控件初始化的顺序有关,如果你把UserControl中的DataContext的绑定写在后台代码,在InitializeComponent()之后就没问题了。
            public UserControl1()
            {
                InitializeComponent();
                this.DataContext = this.btn1.Width;
            }
      

  6.   

    也不知道是什么原因,就这个吧,如果换成是Window,把DataContext放在Window标签又是没有问题的,完全可以实现绑定,但就是不知道为什么放在UserControl里面,就行不通。
      

  7.   

    兄台这句话,我不太懂呢,我就是不明白:
    如果换成是Window,把DataContext放在Window标签又是没有问题的,完全可以实现绑定,但就是不知道为什么放在UserControl里面,就行不通。
      

  8.   

    你放在上面,只写了绑定Button1的 Width属性,但是没写绑定到哪个具体的按钮啊,你下面有两个Button呢,你写在Grid里它就缩小了范围,你如果在Grid里再加一个button3估计也被绑定了
      

  9.   

    。。上面回答没看清题。。
    {binding} 不设定明确的绑定的source,他会从本控件类为开始根据可视树的层次结构自下而上查找不为空的Datacontext属性的值,所以你写在上面它就直接没去找
      

  10.   

    写在上面它就直接没去找?兄台的这句话,是什么意思呢?放在Grid里面就要去找,放在UserControl就不找了吗?
      

  11.   

    http://www.cnblogs.com/tmywu/archive/2012/08/01/2618434.html
      

  12.   

    楼上各位朋友的回答,都不是很准确哦。
    好吧,把顶楼的代码换成下面这样的:<Window x:Class="WPF3.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525" DataContext="{Binding ElementName=button1, Path=Width}">
        <Grid >
            <Button Name="button1" Width="150" Content="Button" HorizontalAlignment="Left" Margin="57,26,0,0" VerticalAlignment="Top"/>
            <Button Name="button2" Content="Button" HorizontalAlignment="Left" Margin="164,98,0,0" VerticalAlignment="Top" Width="{Binding}"/>
        </Grid>
    </Window>在这种情形下,仅仅是把UserControl换成了Window,结果button2的Width正确应用了button1的Width。
    在Window标签中可以绑定,为什么在UserControl标签中就不行了呢?
      

  13.   

    仅仅是把UserControl换成了Window,结果button2的Width正确应用了button1的Width。
    在Window标签中可以绑定,为什么在UserControl标签中就不行了呢?
      

  14.   

    仅仅是把UserControl换成了Window,结果button2的Width正确应用了button1的Width。
    在Window标签中可以绑定,为什么在UserControl标签中就不行了呢?
      

  15.   

    仅仅是把UserControl换成了Window,结果button2的Width正确应用了button1的Width。
    在Window标签中可以绑定,为什么在UserControl标签中就不行了呢?