簡體   English   中英

如何將控件的屬性綁定到另一個控件的屬性

[英]How to bind a property of control to another control's property

我在窗體上有兩個控件(control1和control2),它們彼此相鄰。 control1的寬度是可變的。

我可以將control2的Left屬性綁定到control1的width屬性嗎?

我寫了下面的代碼,但是沒有用:

control2.DataBindings.Add(new Binding("Left", control1, "Width"));

嘗試這個:

control2.DataBindings.Add(new Binding("Left", control1, "Width"));

它需要實現INotifyPropertyChanged接口。

我看起來更深入,它有三個選擇

public enum DataSourceUpdateMode
{
  OnValidation,
  OnPropertyChanged,
  Never
}

默認值為OnValidation,但是Width既不會引起驗證,也不會引起PropertyChanged

用法示例:

   panel1.DataBindings.Add(new Binding("Width", panel2, "Width", false,  DataSourceUpdateMode.OnPropertyChanged));

你可以做到的。 這是我將軌跡欄值綁定到按鈕寬度的代碼片段

button1.DataBindings.Add(new Binding("width", trackBar1, "value"));

我也嘗試過Textbox,它也可以工作。

button1.DataBindings.Add(new Binding("left", textBox1, "Text"));
control2.DataBindings.Add(new Binding("Left", control1, "Width"));//Your code

您的代碼無效,因為更改Width屬性時沒有更改通知,但是Size起作用。

您可以綁定到Size但是問題是您需要一個int但Size屬性的類型為Size ,因此您還需要使用Format事件將其轉換,例如這樣。

var binding = new Binding("Left", control1, "Size", true,DataSourceUpdateMode.Never);
binding.Format += (sender, args) =>
{
    if (args.DesiredType == typeof (int))
    {
        Size size = (Size) args.Value;
        args.Value = size.Width;
    }
};
control2.DataBindings.Add(binding);

另一種方法是在源代碼控件中實現INotifyPropertyChanged 這應該夠了吧。

我認為最簡單的方法是通過EventHandlers:

public Form1()
    {
        InitializeComponent();

        panel2.SizeChanged +=panel2_SizeChanged;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        panel2.Size = new Size(panel2.Size.Width * 2, panel2.Size.Height * 2);
    }

    void panel2_SizeChanged(object sender, EventArgs e)
    {
        panel1.Size = panel2.Size;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM