组框WPF中控件的可见性设置问题
本文关键字:可见性 设置 问题 控件 WPF 组框 | 更新日期: 2023-09-27 18:16:20
我在一个窗口内定义了分组框,如下所示
<ScrollViewer>
<Grid Name="gridMain">
<GroupBox x:Name="grp" Header="Group" Margin="0,71,0,0">
<Grid Margin="0,69,0,0" x:Name="gridmain">
<CheckBox x:Name="ChkShow" Content="Hide Controls" IsChecked="True" Checked="ChkShow_Checked" Unchecked="ChkShow_Unchecked" Margin="27,52,76,38"></CheckBox>
<Label x:Name="lblUsername" Content="Username" Margin="21,10,107,68" Visibility="Hidden"></Label>
</Grid>
</GroupBox>
</Grid>
</ScrollViewer>
这是显示/隐藏控件
的代码private void ChkShow_Unchecked(object sender, RoutedEventArgs e)
{
lblUsername.Visibility = Visibility.Hidden;
}
private void ChkShow_Unchecked(object sender, RoutedEventArgs e)
{
lblUsername.Visibility = Visibility.Visible;
}
但是我无法找到控件,它得到null,所以我怎么能克服这个问题
一切都是秩序。
首先创建CheckBox
。附加事件处理程序并将值设置为True
。事件处理程序触发并尝试调用尚未创建的Label
。因此,Label
的值为null
。
如果你把标签移动到CheckBox
上面,它会起作用。如果您稍后附加事件处理程序,例如在OnLoad
方法中,它也可以工作。
我也遇到过同样的问题。实际上复选框事件在标签控件初始化之前触发。
所以你需要先检查control是否初始化,这意味着control不等于null
或者你可以直接使用绑定设置可见性(需要bool到可见性转换器),或者你可以使用数据触发器设置可见性。
<Label x:Name="lblUsername" Content="Username" Margin="21,10,107,68" Visibility="{Binding path=IsChecked, ElementName=ChkShow, Converter={StaticResource converter}}"></Label>
这里是bool到可见转换器http://wpftutorial.net/ValueConverters.html的链接