组框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,所以我怎么能克服这个问题

组框WPF中控件的可见性设置问题

一切都是秩序。

首先创建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的链接