[英]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.