wpf - 使用 DataTrigger 设置 ScaleTransform 的属性

标签 wpf xaml

这里的 XAML 尝试失败 - 我显然在用 Style 做一些愚蠢的事情/Setter句法。我只想通过设置 ScaleX 来翻转基于某些绑定(bind)的元素和 ScaleY ScaleTransform 的属性来自 DataTrigger . Setter.Property显然不支持属性路径,但是我该如何解决呢?我无法设置整个RenderTransform属性,因为 ScaleXScaleY是独立的。有任何想法吗?

<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>

最佳答案

你可以使用:

<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>

关于wpf - 使用 DataTrigger 设置 ScaleTransform 的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7110491/

相关文章:

c# - 使用 MVVM 包含不同用户控件的 TabControls

c# - 如何在 Blend 4 中编辑使用 VS2012 创建的 c# 项目?

c# - WPF 如何在文本框中使用验证规则而不创建额外的属性以绑定(bind)到对话框中?

.net - 从 ViewModel 的构造函数中将控件动态添加到 Grid

c# - DoWork 中的后台工作变量分配

c# - Caliburn Micro MVVM INotifyPropertyChanged

c# - TreeView 上下文菜单在 HierarchicalDataTemplate 中不起作用

visual-studio - 添加待办事项 : into XAML so that is shows on my task list in visual studio

c# - 全局处理双击 WP7?

wpf - 将 IGrouping 绑定(bind)到功能区组