Xaml转换使现有转换保持不受影响的转换

时间:2012-12-17 13:55:12

标签: wpf xaml

我修改了一个切换开关,所以我可以使用它上面的图标。然后我添加了一个自定义属性,用于保存图像信息及其旋转。我的图像的定义看起来像这样:

<Image x:Name="SwitchKnobActive" Source="{Binding Path=(common:FilterSwitchImageHolder.ActiveImage), RelativeSource={RelativeSource TemplatedParent}}" Width="50" Visibility="{Binding IsOn, RelativeSource={RelativeSource Mode=TemplatedParent}, Converter={StaticResource BoolToVisibilityConverter}, ConverterParameter=True}" RenderTransformOrigin="0.5, 0.5">
    <Image.RenderTransform>
        <TransformGroup>
            <TranslateTransform x:Name="KnobActiveTranslateTransform"/>
            <RotateTransform Angle="{Binding Path=(common:FilterSwitchImageHolder.Angle), RelativeSource={RelativeSource TemplatedParent}}" />
        </TransformGroup>
    </Image.RenderTransform>
</Image>

现在,当我选择图像时,我希望将其缩放两倍,当我这样做时,我会松开旋转。我尝试再次设置旋转,但是它被忽略了..有没有办法保持现有的转换?


编辑:

单击XAML的转换:

<VisualState x:Name="Pressed">
    <Storyboard>
        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="RenderTransform" Storyboard.TargetName="SwitchKnobActive">
            <DiscreteObjectKeyFrame KeyTime="0">
                <DiscreteObjectKeyFrame.Value >
                    <ScaleTransform ScaleX="2" ScaleY="2"></ScaleTransform>
                </DiscreteObjectKeyFrame.Value>
            </DiscreteObjectKeyFrame>
        </ObjectAnimationUsingKeyFrames>
    </Storyboard>
</VisualState>

仅供参考:所有这些代码都在切换开关的控制模板中。

1 个答案:

答案 0 :(得分:2)

您如何应用比例变换?

通常的模式是将虚拟比例变换添加到变换组并稍后进行修改。这样,所有其他变换都不会被替换。

<Image.RenderTransform>
    <TransformGroup>
        <ScaleTransform x:Name="myScaleTransform" ScaleX="1.0" ScaleY="1.0">
        <TranslateTransform x:Name="KnobActiveTranslateTransform"/>
        <RotateTransform Angle="{Binding Path=(common:FilterSwitchImageHolder.Angle), RelativeSource={RelativeSource TemplatedParent}}" />
    </TransformGroup>
</Image.RenderTransform>

您可以稍后从xaml storyboard访问它,如下所示:

<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" 
  Storyboard.TargetName="SwitchKnobActive"
  Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(ScaleTransform.ScaleX)">
  <SplineDoubleKeyFrame KeyTime="00:00:00" Value="1"/>