Свяжите свойство заливки в пути к свойству Foreground из ContentControl в стиле

У меня проблема с Silverlight. Я использовал два дня для борьбы: шаблон со стилем управляет кнопкой. В конкретной кнопке у меня есть холст с путями в качестве контента. Проблема в том, что я хочу, чтобы путь заливал цвет для привязки к Foreground из ContentControl в шаблоне.

Однако мне не удалось выяснить, как построить привязку, чтобы попасть в Forground. Если бы я, например, использовал TextBlock, он автоматически получит цвет Forground из стиля. Как и ожидалось, поскольку текст имеет цвет переднего плана. Причина привязки заключается в том, что анимация управляет фоном, и я хочу, чтобы она распространялась на цвет заливки пути. Любые идеи?

Шаблон содержит следующее:

<Style x:Key="PathButtonStyle" TargetType="Button">

... Animations and state stuff

  <Border x:Name="ButtonBackground" BorderBrush="{TemplateBinding BorderBrush}" >
    <ContentControl x:Name="ContentContainer" 
      ContentTemplate="{TemplateBinding ContentTemplate}" 
      Content="{TemplateBinding Content}" 
      Foreground="{TemplateBinding Foreground}" />
  </Border>
</Style>

В моем макете у меня есть следующее:

<Button x:Name="Play" Style="{StaticResource PathButtonStyle}" >
  <Canvas x:Name="PlayIcon">
    <Path Data="F1M191.4839,96.1763L177.9149,106.5173L177.9149,85.9293z" 
          Fill="{PATH TO CONTENTCONTROLS FOREGROUND}" />
  </Canvas>
</Button>

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

Ответы

Ответ 1

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

<Button x:Name="Play" Style="{StaticResource PathButtonStyle}" >
    <Canvas x:Name="PlayIcon">
        <Path Data="F1M191.4839,96.1763L177.9149,106.5173L177.9149,85.9293z" 
            Fill="{Binding Foreground, ElementName=Play}" />
    </Canvas>
</Button>

Ответ 2

На самом деле вместо того, чтобы устанавливать Canvas как Content in Button, вы можете поместить его в Templete.

      <Style x:Key="PathButtonStyle" TargetType="Button">

    ... Animations and state stuff
     <Canvas x:Name="PlayIcon">
    <Path Data="F1M191.4839,96.1763L177.9149,106.5173L177.9149,85.9293z" 
          Fill="{TemplateBinding Foreground}" />
  </Canvas>
      <Border x:Name="ButtonBackground" BorderBrush="{TemplateBinding BorderBrush}" >
        <ContentControl x:Name="ContentContainer" 
          ContentTemplate="{TemplateBinding ContentTemplate}" 
          Content="{TemplateBinding Content}" 
          Foreground="{TemplateBinding Foreground}" />
      </Border>
    </Style>

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

Ответ 3

Привязка к ContentControl должна помочь (Silverlight 5):

<Button x:Name="Play" Style="{StaticResource PathButtonStyle}" >
    <Canvas x:Name="PlayIcon">
        <Path Data="F1M191.4839,96.1763L177.9149,106.5173L177.9149,85.9293z" 
              Fill="{Binding Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType=ContentControl}}" />
    </Canvas>
</Button>