【发布时间】:2011-07-10 01:30:43
【问题描述】:
在我的 WPF 应用程序的其中一个屏幕上,我列出了一个有用提示的枚举列表来向用户展示。这些提示消息中的每一个都包含复杂的标记,因此我想将消息定义保留在 XAML 中。我应该一次只显示其中一个提示。
如何根据我的枚举来切换这些消息的可见性?
我目前正在做的事情是这样的:
<ContentControl Grid.Row="1">
<ContentControl.Style>
<Style TargetType="{x:Type ContentControl}">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding Suggestion}" Value="AddDescription">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
<Border Style="{StaticResource SuggestBox}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Image Style="{StaticResource SuggestImage}"/>
<TextBlock Grid.Column="1" Style="{StaticResource SuggestMessage}">
You can add a description to this bookmark. Adding a description will make it easier to find.
<Hyperlink Command="{Binding EditCommand}">Add a description.</Hyperlink>
</TextBlock>
</Grid>
</Border>
</ContentControl>
在上面的代码中,Suggestion 是一个枚举,其值对应于应该显示的提示。我只展示了一个提示的 XAML。每个附加提示都有自己的内容控件,其样式触发器绑定到 Suggestion 枚举的不同值。
这似乎有很多 XAML 支持简单的可见性切换操作。肯定有更简单或更好的方法吗?
(请注意,我不能将可见性触发器直接应用于 Border 元素的原因是 Border 元素已经设置了样式。显然,WPF 不允许您组合样式。)
更新:刚刚意识到这与WPF Visibility of a UI element based on combo selection 和How to hide/show items in a stack panel? 本质上是相同的问题,但在不同的上下文中。这些问题的答案似乎和我的 XAML 一样难看。
【问题讨论】:
标签: wpf xaml visibility