XAML Переключение видимости между несколькими вариантами - PullRequest
1 голос
/ 07 марта 2011

На одном из экранов в моем приложении 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.

1 Ответ

3 голосов
/ 07 марта 2011

Попробуйте использовать конвертер: http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.convert.aspx

public class MyConverter : IValueConverter
{
    public Object Convert(Object value, Type targetType, Object parameter, CultureInfo culture)
    {
        Suggestion suggestion = (Suggestion)parameter;
        SomeParameter param = (SomeParameter )value;

        //Do your logical work here and return Visibility.Collapsed or Visibility.Visible.
    }
}

Назовите это так:

<Setter Property="Visibility" Value="{Binding Suggestion, Converter={StaticResource MyConverter}, ConverterParameter={Binding SomeParameter}}"/>

Или что-то подобное, но это общая идея.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...