Применение условного стиля при наведении курсора или фокусировке - PullRequest
2 голосов
/ 06 февраля 2012

Я пытаюсь применить собственный стиль к элементу управления, когда он находится в определенном состоянии, этот стиль можно установить для объекта как стиль.Однако при установке триггера для этого свойство стиля не может быть установлено снова:

<Style TargetType="{x:Type ContentPresenter}">
  <Style.Triggers>
    <Trigger Property="ContentTemplate" Value="{x:Null}">
      <Setter Property="Style" Value="{Binding MouseOverGroupStyle, RelativeSource={RelativeSource TemplatedParent}}" />
    </Trigger>
  </Style.Triggers>
</Style>

Объекту стиля не разрешено влиять на свойство Style объекта, к которому он применяется.

Что имеет смысл, однако, какова альтернатива?Я не могу привязаться к списку сеттеров, потому что он доступен только для чтения.

Ответы [ 3 ]

2 голосов
/ 06 февраля 2012

Ваше решение здесь состоит в том, чтобы использовать StyleSelector, который берет ContentPresenter и проверяет ContentTemplate.

    internal class ContentTemplateStyleSelector : StyleSelector
    {
        public Style NullStyle { get; set; }
        public Style DefaultStyle { get; set; }

        public override Style SelectStyle(object item, DependencyObject container)
        {
            var cp = container as ContentPresenter;

            if (cp == null)
                return null;

            if (cp.ContentTemplate == null)
                return NullStyle;

            return DefaultStyle;
        }
    }

К сожалению, ContentPresenter не имеет свойства StyleSelector, к которому можно привязать StaticResource экземпляравашего ContentTemplateStyleSelector, так что вам может потребоваться привести из ContentPresenter к чему-то, что делает.

В качестве альтернативы, есть вариант использования DataTemplateSelector.

1 голос
/ 06 февраля 2012

Вы можете изменить свойство Template в своем стиле.

Другой, возможно, лучший подход - использовать VisualState s.

0 голосов
/ 06 февраля 2012

Объекту стиля не будет разрешено влиять на свойство Style объекта, к которому он применяется ...

Отметьте это в Windows-Presentation-Foundation.com , чтобы узнать больше...

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