На одном из экранов в моем приложении WPF у меня есть список полезных советов, которые нужно показать пользователю. Каждое из этих подсказок содержит сложную разметку, поэтому я хотел бы сохранить определения сообщений в XAML. Я должен показывать только один из этих советов одновременно.
Как я могу переключать видимость этих сообщений на основе моего enum?
То, что я сейчас делаю, выглядит так:
<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>
В приведенном выше коде предложение - это перечисление со значениями, которые соответствуют подсказке, которая должна отображаться. Я только показал XAML для одного совета. Каждый дополнительный совет имеет свой собственный элемент управления контентом, а его триггер стиля привязан к другому значению перечисления Предложение.
Похоже, что многие XAML поддерживают простую операцию переключения видимости. Конечно, есть более простой или лучший способ?
(Обратите внимание, что причина, по которой я не могу применить триггер видимости непосредственно к элементу Border, заключается в том, что элемент Border уже имеет набор стилей. Очевидно, WPF не позволяет комбинировать стили.)
ОБНОВЛЕНИЕ: Только что понял, что это по сути тот же вопрос, что и WPF Видимость элемента пользовательского интерфейса на основе комбинированного выбора и Как скрыть / показать элементы в стеке панель? но в другом контексте. Ответы на эти вопросы кажутся такими же безобразными, как и мой XAML.