2017-01-19 17 views
0

C#とXAMLを使用してUWPアプリケーションを開発しています。スタイルデータがトリガーとプロジェクトでは、私はいくつかのパスのアイコンが、私は親コントロールがポインタオーバーを持っている場合、このアイコンは色を変更したいResouce辞書を持って、私は、WPFアプリでこれを作った:UWPのパスバインディングの親ステートにスタイルトリガーを設定する方法XAML

<Style.Triggers> 
     <DataTrigger Binding="{Binding IsPressed, RelativeSource={RelativeSource AncestorType={x:Type Button}, Mode=FindAncestor}}" Value="True"> 
      <Setter Property="Fill" Value="White"/> 
     </DataTrigger> 
    </Style.Triggers> 

しかし、UWPで、私はこれがdiferent作品を知っているが、私は私が最初にパススタイル作成しようとしたことを把握することはできません。私はそれが親の状態ではない、この実際の状態をバインドするのを必要とするので、これは正しくありません知っている

<Style TargetType="Path"> 
    <Setter Property="VisualStateManager.VisualStateGroups"> 
     <Setter.Value> 
      <VisualStateGroup> 
       <VisualState x:Name="PointerOver"> 
        <Storyboard> 
         <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Fill" Storyboard.TargetName="RootGrid"> 
          <DiscreteObjectKeyFrame KeyTime="0" Value="#F2B71E"/> 
         </ObjectAnimationUsingKeyFrames> 
         <PointerUpThemeAnimation Storyboard.TargetName="RootGrid"/> 
        </Storyboard> 
       </VisualState> 
      </VisualStateGroup> 
     </Setter.Value> 
    </Setter> 
</Style> 

を、それだけではなく、これは私にエラーを与えます:

The property "VisualStateGroups" does not have an accessible setter.

は、だから私は、パスの内側に、この方法でそれを設定するために選んだ:

<Path x:Key="printIcon" Width="44" Height="43" Canvas.Left="16" Canvas.Top="17" Stretch="Fill" Data="F1 M 25,27L 25,17L 51,17L 51,27L 47,27L 47,21L 29,21L 29,27L 25,27 Z M 16,28L 60,28L 60,51L 51,51L 51,60L 25,60L 25,51L 16,51L 16,28 Z M 55,46L 55,33L 21,33L 21,46L 55,46 Z M 25,44L 25,39L 51,39L 51,44L 25,44 Z "> 
    <VisualStateManager.VisualStateGroups> 
     <VisualStateGroup> 
      <VisualState x:Name="PointerOver"> 
       <Storyboard> 
        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Fill" Storyboard.TargetName="RootGrid"> 
         <DiscreteObjectKeyFrame KeyTime="0" Value="#F2B71E"/> 
        </ObjectAnimationUsingKeyFrames> 
        <PointerUpThemeAnimation Storyboard.TargetName="RootGrid"/> 
       </Storyboard> 
      </VisualState> 
     </VisualStateGroup> 
    </VisualStateManager.VisualStateGroups> 
</Path> 

しかし、今、私はどのように達成することができ、だから私は、私は失われたと思う

The name "PointerOver" is already defined in this scope.
And this don't fix the binding with the parent state

を扱っています親の状態で塗りつぶしの色やパスを変更しますか?

+0

親は常にボタンになりますか? –

+0

この場合はい –

答えて

1

あなたはこのような何かを行うことができ...

「パス」は既に存在してUIコントロールの表示状態を使用し、その後、再利用のための文字列リソースとして格納されます。

<Page.Resources> 
    <x:String x:Key="Icon_Printer">F1 M 25,27L 25,17L 51,17L 51,27L 47,27L 47,21L 29,21L 29,27L 25,27 Z M 16,28L 60,28L 60,51L 51,51L 51,60L 25,60L 25,51L 16,51L 16,28 Z M 55,46L 55,33L 21,33L 21,46L 55,46 Z M 25,44L 25,39L 51,39L 51,44L 25,44 Z</x:String> 
    <Color x:Key="Color_Base">#FFF2B71E</Color> 
    <Color x:Key="Color_Hover">#FFFFFFFF</Color> 
    <SolidColorBrush x:Key="Brush_Base" Color="{StaticResource Color_Base}" /> 
    <SolidColorBrush x:Key="Brush_Hover" Color="{StaticResource Color_Hover}" /> 
    <Style x:Key="PrinterButtonStyle" TargetType="Button" > 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="Button"> 
        <Grid x:Name="RootGrid" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}"> 
         <VisualStateManager.VisualStateGroups> 
          <VisualStateGroup x:Name="CommonStates"> 
           <VisualState x:Name="Normal"> 
            <Storyboard> 
             <PointerUpThemeAnimation Storyboard.TargetName="RootGrid"/> 
            </Storyboard> 
           </VisualState> 
           <VisualState x:Name="PointerOver"> 
            <Storyboard> 
             <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Fill" Storyboard.TargetName="Icon"> 
              <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource Brush_Hover}"/> 
             </ObjectAnimationUsingKeyFrames> 
             <PointerUpThemeAnimation Storyboard.TargetName="RootGrid"/> 
            </Storyboard> 
           </VisualState> 
           <VisualState x:Name="Pressed"> 
            <Storyboard> 
             <PointerDownThemeAnimation Storyboard.TargetName="RootGrid"/> 
            </Storyboard> 
           </VisualState> 
           <VisualState x:Name="Disabled"> 
            <Storyboard> 
             <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Fill" Storyboard.TargetName="Icon"> 
              <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource SystemAltMediumColor}"/> 
             </ObjectAnimationUsingKeyFrames> 
            </Storyboard> 
           </VisualState> 
          </VisualStateGroup> 
         </VisualStateManager.VisualStateGroups> 
         <Grid.RowDefinitions> 
          <RowDefinition /> 
         </Grid.RowDefinitions> 
         <Path x:Name="Icon" HorizontalAlignment="Center" VerticalAlignment="Center" Fill="{TemplateBinding Foreground}" Data="{StaticResource Icon_Printer}" /> 
        </Grid> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

</Page.Resources> 
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <Button Foreground="{StaticResource Brush_Base}" Style="{StaticResource PrinterButtonStyle}" /> 
</Grid> 
関連する問題