我在窗口中定义了我的groupbox,如下所示
<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;
}
但是我无法找到它变为空的控件,所以我怎么能解决这个问题
答案 0 :(得分:2)
一切都与订单有关。
首先创建CheckBox
。附加事件处理程序,值设置为True
。事件处理程序触发并尝试调用尚未创建的Label
。因此,Label
的值为null
。
如果您将标签移到CheckBox
上方,它确实有效。如果您稍后将附加事件处理程序,例如在OnLoad
方法中,它也会起作用。
答案 1 :(得分:1)
我遇到了同样的问题。 实际上在标签控件初始化之前会触发复选框事件。
所以你需要检查第一个控件是否先被初始化,意味着控制不等于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
的链接