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

时间:2016-11-04 06:52:28

标签: c# wpf

我在窗口中定义了我的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;
}

但是我无法找到它变为空的控件,所以我怎么能解决这个问题

2 个答案:

答案 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

的链接