Свяжите свойство fill в пути со свойством Foreground из ContentControl в стиле - PullRequest
13 голосов
/ 04 октября 2010

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

Однако я не смог выяснить, как создать привязку, чтобы добраться до Forground.Если бы я, например, использовал TextBlock, он автоматически получит цвет Forground от Style.Как и ожидалось, текст имеет цвет переднего плана.Причина привязки заключается в том, что анимация контролирует 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>

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

Ответы [ 3 ]

9 голосов
/ 25 марта 2011

Поскольку вы дали имя своей кнопке, вы можете использовать параметр 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>
1 голос
/ 24 марта 2011

На самом деле вместо установки Canvas в качестве контента в кнопке вы можете поместить его в 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>

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

0 голосов
/ 16 марта 2015

Привязка к 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>
...