Есть ли способ повторно использовать установщики свойств среди триггеров - PullRequest
3 голосов
/ 12 июля 2009

В WPF есть какой-то механизм для повторного использования установщиков свойств среди разных триггеров? Например, у меня есть следующее.

                <Style TargetType="{x:Type Label}">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding}" Value="{x:Null}">
                        <Setter Property="Content" Value="Not Connected" />
                        <Setter Property="Foreground" Value="Red" />
                    </DataTrigger>
                    <DataTrigger Binding="{Binding IsConnected}" Value="False">
                        <Setter Property="Content" Value="Not Connected" />
                        <Setter Property="Foreground" Value="Red" />
                    </DataTrigger>
                    <DataTrigger Binding="{Binding IsConnected}" Value="True">
                        <Setter Property="Content" Value="Connected" />
                        <Setter Property="Foreground" Value="Green" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>

Установщики для Null и False идентичны, и было бы хорошо, если бы была только одна точка изменения.

Ответы [ 2 ]

3 голосов
/ 12 июля 2009

Вы всегда можете создать ресурс, подобный этому:

<Setter x:Key="setter1" Property="Content" Value="Not Connected" />

Однако вы не можете использовать ключи ресурса в качестве объекта в коллекции.

Вы можете установить где-нибудь

<SomeObject Setter="{StaticResource setter1}"/>

но сеттеры почти всегда добавляются в коллекции, и вы не можете добавить ключи ресурсов в синтаксисе коллекции xaml.

Единственный сценарий, который я могу придумать, который бы поддерживал это, - создать ресурс SetterBaseCollection с этими двумя идентичнымипары Setters,

<SetterBaseCollection x:Key="settersKey">
    <Setter Property="Label.Content" Value="Not Connected" />
    <Setter Property="Label.Foreground" Value="Red" />
</SetterBaseCollection>

<Style TargetType="{x:Type Label}">
    <Style.Triggers>
        <DataTrigger Binding="{Binding}" Value="{x:Null}" Setters="{StaticResource settersKey}"/>

    // ...

    </Style.Triggers>
</Style>

, но свойство коллекции DataTrigger.Setters доступно только для чтения и не может быть установлено из xaml.

Таким образом, ответом будет нет.

1 голос
/ 23 ноября 2012

В этом особом случае было бы лучше сделать несвязанный случай по умолчанию (без условия) и создать DataTrigger только для одного другого случая, который отличается.

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