我尝试向我的应用添加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
。
我觉得我可能犯了一个简单的错误,任何建议都会非常感激。
答案 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
值添加true
。 Value="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>