使用DataTrigger设置ScaleTransform的属性

Tim*_*ers 5 wpf xaml

这里失败的XAML尝试 - 我显然在使用Style/ Settersyntax 做一些愚蠢的事情.我只想通过设置a 的a ScaleXScaleY属性来基于某些绑定来翻转元素.显然不支持属性路径,但我怎么能绕过这个呢?我无法设置整个属性,因为它是独立的.有任何想法吗?ScaleTransformDataTriggerSetter.PropertyRenderTransformScaleXScaleY

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
   <StackPanel>
      <TextBlock FontSize="50" RenderTransformOrigin=".5,.5">
         <TextBlock.Style>
            <Style>
               <Style.Triggers>
                  <DataTrigger Binding="{Binding IsChecked, ElementName=FlipX}" Value="True">
                     <Setter Property="RenderTransform.ScaleX" Value="-1"/>
                  </DataTrigger>
                  <DataTrigger Binding="{Binding IsChecked, ElementName=FlipY}" Value="True">
                     <Setter Property="RenderTransform.ScaleY" Value="-1"/>
                  </DataTrigger>
               </Style.Triggers>
            </Style>
         </TextBlock.Style>
         <TextBlock.RenderTransform>
          <ScaleTransform/>
         </TextBlock.RenderTransform>
      Hello World
      </TextBlock>
      <CheckBox Name="FlipX">Flip x</CheckBox>
      <CheckBox Name="FlipY">Flip y</CheckBox>
   </StackPanel>
</Page>
Run Code Online (Sandbox Code Playgroud)

Cod*_*ked 8

你可以使用:

<Style.Triggers>
    <MultiDataTrigger>
        <MultiDataTrigger.Conditions>
            <Condition Binding="{Binding IsChecked, ElementName=FlipX}" Value="True" />
            <Condition Binding="{Binding IsChecked, ElementName=FlipY}" Value="True" />
         </MultiDataTrigger.Conditions>
         <Setter Property="RenderTransform">
             <Setter.Value>
                 <ScaleTransform ScaleX="-1" ScaleY="-1" />
             </Setter.Value>
         </Setter>
    </MultiDataTrigger>
    <MultiDataTrigger>
        <MultiDataTrigger.Conditions>
            <Condition Binding="{Binding IsChecked, ElementName=FlipX}" Value="True" />
            <Condition Binding="{Binding IsChecked, ElementName=FlipY}" Value="False" />
         </MultiDataTrigger.Conditions>
         <Setter Property="RenderTransform">
             <Setter.Value>
                 <ScaleTransform ScaleX="-1" ScaleY="1" />
             </Setter.Value>
         </Setter>
    </MultiDataTrigger>
    <MultiDataTrigger>
        <MultiDataTrigger.Conditions>
            <Condition Binding="{Binding IsChecked, ElementName=FlipX}" Value="False" />
            <Condition Binding="{Binding IsChecked, ElementName=FlipY}" Value="True" />
         </MultiDataTrigger.Conditions>
         <Setter Property="RenderTransform">
             <Setter.Value>
                 <ScaleTransform ScaleX="1" ScaleY="-1" />
             </Setter.Value>
         </Setter>
    </MultiDataTrigger>
</Style.Triggers>
Run Code Online (Sandbox Code Playgroud)


Rob*_*ney 2

Setter 作用于元素,而Transform不是派生自UIElement,因此我认为您无法使用样式来做到这一点。

我将在视图模型中修复此问题:实现布尔值FlipXFlipY属性,并公开ScaleX可以绑定到ScaleY的属性。ScaleTransform