选中复选框后,WPF会显示StackPanel

时间:2015-04-21 09:34:58

标签: c# wpf xaml

我尝试向我的应用添加StackPanel,只有在用户检查CheckBox时才可见。我为此写的xaml在这里:

<Window>
  <Grid>
    <StackPanel>   
       <StackPanel Orientation="Horizontal">
            <CheckBox Content="Override Offsets?" Name="offsetCB" Margin="5" Checked="OffsetOverride_Checked" Unchecked="OffsetOverride_Unchecked"/>
        </StackPanel>

        <StackPanel Orientation="Horizontal" Visibility="Collapsed">

            <StackPanel.Style>
                <Style TargetType="{x:Type StackPanel}">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding ElementName=offsetCB, Path=IsChecked}" Value="True">
                            <Setter Property="Visibility" Value="Visible" />

                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </StackPanel.Style>

                    <TextBlock Margin="5" Text="Can you see me?"/>
        </StackPanel> 
    </StackPanel>
  </Grid>
<Window>

当检查CheckBox时,没有任何变化,但我没有看到任何例外情况或类似情况。我们的想法是,一旦这个工作,我将添加更多元素TextBlock

我觉得我可能犯了一个简单的错误,任何建议都会非常感激。

3 个答案:

答案 0 :(得分:3)

您可以使用BooleanToVisibilityConverter中提供的PresentationFramework。声明以下资源:

<Window.Resources>
    <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
</Window.Resources>

然后您可以在XAML代码中使用Converter,如下所示:

<StackPanel Orientation="Horizontal">
    <CheckBox Content="Override Offsets?"
              Name="offsetCB" 
              Margin="5"
              Checked="OffsetOverride_Checked" 
              Unchecked="OffsetOverride_Unchecked"/>
</StackPanel>

<StackPanel Orientation="Horizontal" 
            Visibility="{Binding Path=IsChecked, 
                         ElementName=offsetCB, 
                         Converter={StaticResource BooleanToVisibilityConverter}">

答案 1 :(得分:0)

您(至少)需要为布尔Resource值添加trueValue="True"是字符串文字"True",而不是布尔值。

<StackPanel.Resources>
    <s:Boolean x:Key="True">True</s:Boolean>
</StackPanel.Resources>

并使用它:

<DataTrigger Binding="{Binding ElementName=offsetCB, Path=IsChecked}"
             Value="{StaticResource True}">

答案 2 :(得分:0)

试试这个

<Style.Triggers>
                            <DataTrigger Binding="{Binding ElementName=offsetCB, Path=IsChecked}" Value="True">
                                <Setter Property="Visibility" Value="Visible" />
                            </DataTrigger>
                            <DataTrigger Binding="{Binding ElementName=offsetCB, Path=IsChecked}" Value="False">
                                <Setter Property="Visibility" Value="Collapsed" />
                            </DataTrigger>
                        </Style.Triggers>