在ControlTemplate上更改DependencyProperty

时间:2015-04-11 04:29:33

标签: xaml windows-8.1

我有一个带有两个不同图像的按钮 - 一个用于正常状态,一个用于PointerOver状态:

public sealed class MyButtonTwo : Button
{
    public static readonly DependencyProperty ImageSourceProperty = DependencyProperty.Register(
        "ImageSource", typeof (ImageSource), typeof (MyButtonTwo), new PropertyMetadata(default(ImageSource)));

    public ImageSource ImageSource
    {
        get { return (ImageSource) GetValue(ImageSourceProperty); }
        set { SetValue(ImageSourceProperty, value); }
    }

    public static readonly DependencyProperty ImageSource2Property = DependencyProperty.Register(
        "ImageSource2", typeof (ImageSource), typeof (MyButtonTwo), new PropertyMetadata(default(ImageSource)));

    public ImageSource ImageSource2
    {
        get { return (ImageSource) GetValue(ImageSource2Property); }
        set { SetValue(ImageSource2Property, value); }
    }

我在样式中的控制模板中使用此属性:

<Image x:Name="Image"                      
        Source="{TemplateBinding ImageSource}" />

在样式中,我可以更改MyButton的属性:

<VisualStateManager.VisualStateGroups>
  <VisualStateGroup x:Name="CommonStates">
    <VisualState x:Name="Normal"/>
      <VisualState x:Name="PointerOver">
        <Storyboard>
          <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="FullGrid">
            <DiscreteObjectKeyFrame KeyTime="0" Value="White"/>

但我无法改变我的依赖属性:

 <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Source" Storyboard.TargetName="Image">
   <DiscreteObjectKeyFrame KeyTime="0" Value="{TemplateBinding ImageSource2}"/>

我找到的唯一方法是在模板上添加两个不同的图像并更改它们的可见性。

可能有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

它适用于常规Binding而不是TemplateBinding:

<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Source"
                               Storyboard.TargetName="Image">
    <DiscreteObjectKeyFrame KeyTime="0"
        Value="{Binding ImageSource2,
                        RelativeSource={RelativeSource Mode=TemplatedParent}}"/>
</ObjectAnimationUsingKeyFrames>