繁体   English   中英

C#和WPF:程序控制

[英]C# and WPF: Programmatic Control

我正在学习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());
    }
}

谢谢

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

这是一种方法。 首先,为主网格命名 - 比如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);
    }
}

而且你已经完成了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM