2016-11-24 32 views
1

ここでは、ボタンを円としてカスタマイズしました。しかし、トリガ内のプロパティは機能していません。 IsEnabledプロパティがfalseでIsMouseOverプロパティがtrueの場合、背景を赤に設定したいと思います。スタイルにIsMouseOverPropertyを追加するにはどうすればいいですか

<Style x:Key="CircleButton" TargetType="Button"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="Button"> 
       <Grid > 
        <Ellipse Stroke="#003878" 
       StrokeThickness="2" > 
         <Ellipse.Fill> 
          <RadialGradientBrush> 
           <GradientStop Offset="0" 
            Color="#003878" /> 
           <GradientStop Offset="1" 
            Color="#003878" /> 
           <GradientStop Offset="1" 
            Color="#003878" /> 
           <RadialGradientBrush.Transform> 
            <TransformGroup> 
             <ScaleTransform ScaleY="0.65" /> 
            </TransformGroup> 
           </RadialGradientBrush.Transform> 
          </RadialGradientBrush> 
         </Ellipse.Fill> 
        </Ellipse> 
        <ContentPresenter HorizontalAlignment="Center" 
          VerticalAlignment="Center"/> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="Foreground" Value="#FFFFFF" /> 
    <Setter Property="FontSize" Value="12" /> 
    <Setter Property="FontFamily" Value="Calibri"/> 
    <Setter Property="BorderThickness" Value="0"/> 
    <Style.Triggers> 
     <Trigger Property="IsEnabled" Value="False"> 
      <Setter Property="Background" Value="Red"/> 
     </Trigger> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter Property="Background" Value="Red"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 
+0

[MultiTrigger](https://msdn.microsoft.com/en-us/library/system.windows.multitrigger(v = vs.110).aspx) – 3615

+0

@ 3615「IsMouseOver」は_true_に発火しませんボタンは無効です。 – Sam

+0

@Sam Rogerは、単純なマルチトリガーは機能しません。プロパティ名をトリガするために注意を払っていませんでした。 – 3615

答えて

1

あなたがコントロールのテンプレートを変更しているので、あなたのトリガが設定した背景色は無視されています。もはや「背景」を持つ標準ボタンではなく、独自の属性セットを持つ楕円を描いています。

はあなたが必要なもの、楕円の塗りつぶしの色を変更しますトリガ、このようなものです: -

<ControlTemplate.Triggers> 
    <Trigger Property="IsEnabled" Value="False"> 
     <Setter TargetName="ellipse" Property="Fill" Value="Red"/> 
    </Trigger> 
    <Trigger Property="IsMouseOver" Value="True"> 
     <Setter TargetName="ellipse" Property="Fill" Value="Red"/> 
    </Trigger> 
</ControlTemplate.Triggers> 

場所<ControlTemplate>要素内でこのXAML、および既存の<Style.Triggers>部分を取り除きます。

上記のXAMLのTargetName属性にも注意してください。したがって、セッターはテンプレート内のどのコントロールを対象にするのかを知っています。あなたはそのため、このようなあなたの楕円に名前を追加する必要があります: -

<Ellipse x:Name="ellipse" Stroke=.... > 

を(私の例では、唯一の楕円形の塗りつぶしを変更するので、あなたはおそらく赤にストロークの色を変更するには、さらにトリガーを追加したいと思います、同じアプローチを使用して)。

+0

これはまさに私が探していたものです!ありがとう –

+0

@AnuHardinはうれしいです。受け入れられた答えとしてマークしてください! –

+0

申し訳ありません。私の評判が15未満であるため、回答としてマークすることはできません。 –

関連する問題