如何允许用户更改模板中的属性?

时间:2010-03-02 14:34:50

标签: silverlight

我在Blend中编辑了一个按钮(使用编辑当前模板)。我添加了鼠标等动画,按钮按预期工作。

然而,在鼠标悬停事件上,我有一个可以缩放的形状。我想要做的是为用户提供在XAML中设置旋转和缩放属性的选项。

例如,像这样:

<Button Height="76" Content="Gallery" Style="{StaticResource RotatingAnimationButton}" " Scaling="2.0" >

我在模板中的位置:

<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="Document" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0]. (ScaleTransform.ScaleX)">

其中Value =“1.5”将更改为“2.0”。

目前,我所拥有的只是模板的样式。我不确定是否可以传递参数或者我必须创建某种用户控件?

JD

注意:此问题最初发布为Silverlight和WPF。但正如您将看到它只适用于Silverlight,这就是为什么提供的优秀解决方案给我带来了问题。

1 个答案:

答案 0 :(得分:2)

您有两个不错的选择:

  1. 您可以继承Button并添加“缩放”属性,或
  2. 您可以创建附加的“缩放”属性并将其附加到Button
  3. 在任何一种情况下,你的动画都可以绑定它。

    除非您的按钮是以其他方式自定义的,否则我通常会使用随附的属性。您将使用标准的附加属性模板(使用“propa”代码段):

    public class MyAttachedProperties
    {
          // Scaling
      public static double GetScaling(DependencyObject obj) { return (double)obj.GetValue(ScalingProperty); }
      public static void SetScaling(DependencyObject obj, double value) { obj.SetValue(ScalingProperty, value); }
      public static readonly DependencyProperty ScalingProperty = DependencyProperty.RegisterAttached("Scaling", typeof(double), typeof(MyAttachedProperties));
    }
    

    在使用该按钮的代码中,您可以像这样引用它:

    <Button Height="76" Content="Gallery"
            Style="{StaticResource RotatingAnimationButton}"
            local:MyAttachedProperties.Scaling="2.0" />
    

    在模板中,您可以像这样绑定它:

    Value="{Binding Path=(local:MyAttachedProperties.Scaling),
                    RelativeSource={RelativeSource TemplatedParent}}"
    

    XAML的这两个部分假设你有xmlns:local定义为包含MyAttachedProperties类。