WPF ControlTemplate и Binding - PullRequest
       0

WPF ControlTemplate и Binding

1 голос
/ 27 марта 2010

В приведенном ниже коде MousePressImage является свойством зависимости класса ButtonControl. Следующая привязка не работает. Благодарим Вас за помощь в решении этой проблемы.

Value="{Binding RelativeSource={x:Static RelativeSource.Self},
                Path=MousePressImage}"/>


<Style TargetType="{x:Type local:ButtonControl}">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type local:ButtonControl}">
        <Border>
          <Image x:Name="img"
                 Source="pack://application:,,,/Recipe_06_13;component/Resources/normal.bmp"
                 />
        </Border>
        <!--<Border x:Name="border">
          <Border.Background>
            <ImageBrush x:Name="img"
                        ImageSource="/Recipe_06_13;component/Resources/fatal.png"/>
          </Border.Background>
        </Border>-->
        <ControlTemplate.Triggers>
          <Trigger Property="IsPressed" Value="True">
            <Setter TargetName="img" 
                    Property="Source" 
                    Value="{Binding RelativeSource={x:Static RelativeSource.Self},
                                Path=MousePressImage}"/>
          </Trigger>
        </ControlTemplate.Triggers>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

Я создаю ButtonControl вот так.

<local:ButtonControl Height="48" Width="160" 
  MouseOverImage="pack://application:,,,/Recipe_06_13;component/Resources/Over.bmp"
  MousePressImage="pack://application:,,,/Recipe_06_13;component/Resources/Press.bmp"
  DisableImage=" ">
</local:ButtonControl>

1 Ответ

6 голосов
/ 27 марта 2010

Поскольку ваш триггер находится на шаблоне ControlTemplate, вам необходимо получить MousePressImage из экземпляра элемента управления , имеющего шаблон . Для этого используйте TemplateBinding или (более надежно) RelativeSource TemplatedParent:

<Setter TargetName="img" 
        Property="Source" 
        Value="{Binding RelativeSource={RelativeSource TemplatedParent},
                        Path=MousePressImage}" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...