【问题标题】:C# and WPF: Programmatic ControlC# 和 WPF:程序控制
【发布时间】:2008-12-12 20:17:31
【问题描述】:

我正在学习 WPF,似乎发现了一些奇怪的东西,我在任何我搜索过的地方都找不到原因。

我有一个窗口,上面有一个名为“chkTest”的复选框。我将其默认设置为 true。

以下代码是我不明白的。基本上我试图将“chkTest”控件设置为我动态创建的控件。消息框显示我在代码中设置的值,但是窗口上的控件仍然设置为true。

有人能解释一下这背后的过程吗?

public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();

        CheckBox chk = new CheckBox();
        chk.IsChecked = false;

        this.chkTest = chk;

        MessageBox.Show(chk.IsChecked.Value.ToString());
    }
}

谢谢

【问题讨论】:

    标签: c# wpf controls


    【解决方案1】:

    这是因为您这样做是在欺骗 DependencyProperty 系统 - 请记住,DP 属性的 getter/setter 与常规属性的工作方式不同。 UI 在 IsChecked 属性上有一个触发器,但您替换了整个对象。由于您实际上并未更改可见复选框上的 IsChecked,因此触发器不会触发且 UI 不会更新。

    【讨论】:

      【解决方案2】:

      这是解决问题的一种方法。首先,你给你的主网格起一个名字——比如说,LayoutRoot:

      <Grid x:Name="LayoutRoot">
          <CheckBox x:Name="chkTest" IsChecked="True"></CheckBox>
      </Grid>
      

      那么,你说:

      public partial class Window1 : Window
      {
          public Window1()
          {
              InitializeComponent();
      
              CheckBox chk = new CheckBox();
              chk.IsChecked = false;
      
              LayoutRoot.Children.Remove(chkTest);
              LayoutRoot.Children.Add(chk);
          }
      }
      

      你已经完成了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-17
        • 2010-10-26
        相关资源
        最近更新 更多