代码之家  ›  专栏  ›  技术社区  ›  Homam

在运行时添加控件时,以编程方式绑定不起作用

  •  3
  • Homam  · 技术社区  · 15 年前

    我有两个文本框,我想在运行时绑定它们的可见性属性,

    当我通过Xaml添加文本框时,绑定可以工作,但当我以编程方式添加文本框时,绑定不起作用,

        public partial class Window1 : Window
        {
            TextBox txt1 = new TextBox();
            TextBox txt2 = new TextBox();
            public Window1()
            {
                InitializeComponent();
    
                txt1.Name = "txt1";
                txt1.Margin= new Thickness(30,0,128,0);
                txt1.VerticalAlignment = VerticalAlignment.Top;
    
                txt2.Name = "txt2";
                txt2.Margin = new Thickness(30, 32, 128, 0);
                txt2.VerticalAlignment = VerticalAlignment.Top;
    
                Binding binding = new Binding();
                binding.ElementName = "txt1";
                binding.Path = new PropertyPath(TextBox.VisibilityProperty);
                BindingOperations.SetBinding(txt2, TextBox.VisibilityProperty, binding);
    
    
                grid.Children.Add(txt1);
                grid.Children.Add(txt2);
            }
        }
    

    提前谢谢

    1 回复  |  直到 15 年前
        1
  •  7
  •   Gabe    15 年前

    更新

    而不是设置 ElementName 属性,只需设置 Source 的属性 Binding

    TextBox txt1 = new TextBox();
    TextBox txt2 = new TextBox();
    
    public Window1()
    {
       InitializeComponent();
    
       txt1.Name = "txt1";
       txt1.Margin = new Thickness(30, 0, 128, 0);
       txt1.VerticalAlignment = VerticalAlignment.Top;
       txt1.Visibility = Visibility.Visible;
    
       txt2.Name = "txt2";
       txt2.Margin = new Thickness(30, 32, 128, 0);
       txt2.VerticalAlignment = VerticalAlignment.Top;
    
       Binding binding = new Binding();
       binding.Source = txt1; // set the source object instead of ElementName
       binding.Path = new PropertyPath(TextBox.VisibilityProperty);
       BindingOperations.SetBinding(txt2, TextBox.VisibilityProperty, binding);
    
       grid.Children.Add(txt1);
       grid.Children.Add(txt2);
    }
    
    推荐文章