Стилирование xaml на основе поля enum в объекте - PullRequest
2 голосов
/ 08 апреля 2011

У меня есть коллекция объектов, таких как:

public enum ObjectType
{
   Type1,
   Type2
}

public class MyObject
{
   ...
   public ObjectType ObjType;
   public string Header;
   ...
}

Один из стилей, которые у меня есть в примере приложения:

    <Style TargetType="{x:Type inf:MyObject}">
        <Setter Property="Header" Value="{Binding Header}" />
    </Style>

Как создать отдельные стили, ограниченныеполе перечисления ObjectType?IE имеет отдельный стиль для MyObject с ObjType, установленным в Type1 против Type2?

В моих полях реализован INotifyPropertyChanged, это всего лишь краткий пример кода

Спасибо

Ответы [ 2 ]

5 голосов
/ 08 апреля 2011

Я бы, наверное, сделал это с помощью триггеров:

<Style TargetType="{x:Type inf:MyObject}">
    <Setter Property="Header" Value="{Binding Header}" />
    <Style.Triggers>
        <DataTrigger Binding="{Binding ObjType}" Value="Type1">
            <!-- A bunch of setters -->
        </DataTrigger>
        <DataTrigger Binding="{Binding ObjType}" Value="Type2">
            <!-- Another bunch of setters -->
        </DataTrigger>
    </Style.Triggers>
</Style>

Разделение, вероятно, невозможно.

Хорошо, вы можете создавать отдельные стили, но вам нужно будет применять их вручную, используя ResourceKey:

<Style x:Key="Type1Style" TargetType="{x:Type inf:MyObject}"
                          BasedOn="{StaticResource {x:Type inf:MyObject}}">
    <!-- Setters for type1 -->
</Style>
<Style x:Key="Type2Style" TargetType="{x:Type inf:MyObject}"
                          BasedOn="{StaticResource {x:Type inf:MyObject}}">
    <!-- Setters for type2 -->
</Style>
1 голос
/ 08 апреля 2011

Попробуйте связать свойство стиля со свойством enum, используя конвертер значений.

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