2012-12-17 85 views
1

我修改了一个切换开关,因此我可以使用它的图标ontop。然后我添加了一个自定义属性,它保存图像信息和旋转。我的形象的定义看起来有点像这样: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> 

FYI:所有这些代码是一个切换开关的控制模板内。

+0

尝试矩阵转换,它真的很酷 – slfan

回答

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的故事板访问它是这样的:

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

THX对您输入的,我说行,但我做访问图像元素我想我只是在视觉状态下按下来替换整个变换组?我怎样才能直接访问一个transfrom? – Mark

+0

你是从xaml还是代码背后做的?如果从XAML然后看到我的编辑。 –

+0

很酷的工作:-)虽然我必须注意,组中列出的转换的顺序必须是正确的,否则数组访问[0]将失败。 – Mark