Неполадка при привязке к свойству templatedparent для установки значения внутри установщика стиля в wpf

Моя проблема:

Я не смог выяснить, каким образом я внутри поля Setter.Value установщика для свойства A в стиле, нацеленном на конкретный элемент управления, могу связать свойство B этого конкретного элемента управления. Более конкретно, я хочу использовать значение кисти "Передний план" для графического элемента внутри визуального дерева свойства Content для Button. это гарантирует, что графический элемент всегда имеет цвет переднего плана, установленный для этого элемента управления кнопки.

Что я пытаюсь достичь:

Я работаю над WPF-приложением, где у меня есть три кнопки управления:

  1. DefaultButton
  2. SpecialButton
  3. ExtendedSpecialButton

DefaultButton - это место, где я определяю стиль кнопок в приложении через стиль с ControlTemplate.

SpecialButton представляет новое свойство, которое не должно использоваться для общих кнопок. Это свойство будет представлено одним визуальным состоянием, которое я определяю с помощью установщика стиля. В противном случае он должен быть идентичным при появлении кнопки DefaultButton.

Я определяю стиль этой SpecialButton, основываясь на стиле DefaultButton. В этом стиле отсутствует ControlTemplate, только ответ MultiTrigger на основе пары условий свойств, устанавливающих пару визуальных свойств:

<Style x:Key="SpecialButtonStyle" TargetType="{x:Type MyControls:SpecialButton}" BasedOn="{StaticResource DefaultButtonStyle}">
    <Style.Triggers>
        <MultiTrigger>
            <MultiTrigger.Conditions>
                <Condition Property="IsActive" Value="false"/>
                <Condition Property="IsMouseOver" Value="false"/>
            </MultiTrigger.Conditions>
            <Setter Property="BorderBrush" Value="{DynamicResource ButtonDisabledBorder}" />
            <Setter Property="Background" Value="{DynamicResource ButtonDisabledBg}" />
        </MultiTrigger>
    </Style.Triggers>
</Style>

Все это работало отлично.

Следующий шаг также не проблема: я хотел, чтобы ExtendedSpecialButton базировался на SpecialButton и устанавливал содержимое формы по умолчанию внутри кнопки.

<Style x:Key="ExtendedSpecialButtonStyle" TargetType="{x:Type MyControls:ExtendedSpecialButton}" BasedOn="{StaticResource SpecialButtonStyle}">
    <Setter Property="Content">
        <Setter.Value>
            <Rectangle Fill="Black" Height="5" Width="15"></Rectangle>
        </Setter.Value>
    </Setter>
</Style>

Оригинальный стиль DefaultButton все еще присутствует - добавленное визуальное состояние, отвечающее на IsActiveProperty SpecialButton, все еще с нами - и ExtendedSpecialButton также унаследовал визуальное поведение, созданное MultiTrigger из SpecialButton.

Я также успешно отобразил графический элемент, который должен иметь этот ExtendedSpecialButton.

Однако я хотел, чтобы в заливке этого графического элемента использовался цвет переднего плана. Этот цвет переднего плана изначально стилизован в DefaultButton и отлично работает для двух первых кнопок.

Код ниже, как я в настоящее время думал, что такое связывание должно быть сделано. Но это не работает

   <Style x:Key="ExtendedSpecialButtonStyle" TargetType="{x:Type MyControls:ExtendedSpecialButton}" BasedOn="{StaticResource SpecialButtonStyle}">
    <Setter Property="Content">
        <Setter.Value>
            <Rectangle Fill="{Binding RelativeSource={RelativeSource TemplatedParent}}" Height="6" Width="20"></Rectangle>
        </Setter.Value>
    </Setter>
</Style>

Кто-нибудь знает, что я мог сделать, чтобы настроить привязку так, чтобы она делала то, что я намеревался сделать?

0 ответов

Другие вопросы по тегам