2016-12-17 12 views
1

マウスオーバー効果を無効にします。背景を設定すると、これは私のスタイルです

<UserControl.Resources> 
    <Style TargetType="Button" x:Key="Style2" BasedOn="{StaticResource MetroCircleButtonStyle}"> 
     <Style.Triggers> 
      <Trigger Property="IsMouseOver" Value="True"> 
       <Setter Property="Foreground" Value="#000000"/> 
       <Setter Property="Background" Value="#ededed"/> 
      </Trigger> 
      <Trigger Property="IsPressed" Value="True"> 
       <Setter Property="Foreground" Value="#ffffff"/> 
       <Setter Property="Background" Value="#009688"/> 
      </Trigger> 
      <Trigger Property="IsEnabled" Value="false"> 
       <Setter Property="Foreground" Value="#FF808080"/> 
      </Trigger> 

     </Style.Triggers> 
    </Style> 
</UserControl.Resources> 

そして、私はこのようにそれを使用:

<Button x:Name="button" Content="abcdefg" Style="{DynamicResource Style2}" Width="45" Height="45" VerticalAlignment="Top" BorderThickness="0" FontSize="18" FontFamily="/WpfApplication2;component/Resources/#Vazir"/> 

これは完全にOKに動作します。問題は、XAMLを変更するか、背景を動的に変更してボタンの背景を変更しようとするときです。私がそうすると、マウスオーバーエフェクトはもう働きません。

<Button x:Name="button" Content="abcdefg" Background="White" Style="{DynamicResource Style2}" Width="45" Height="45" VerticalAlignment="Top" BorderThickness="0" FontSize="18" FontFamily="/WpfApplication2;component/Resources/#Vazir"/> 

それとも

button.Background = Brushes.Transparent; 

私は背景を設定したときにマウスオーバー効果は動作しませんが、私は背景を設定する必要があります。なにが問題ですか?

答えて

2

直接設定された依存性プロパティ値( "ローカル値")は、スタイルセッターによって設定された値より高い優先度を持ちます。詳細はDependency Property Value Precedenceを参照してください。だから、

、あなたのトリガを無効に効果的

<Button Background="White" ... /> 

を設定します。

代わりにBackgroundプロパティを別のスタイル設定ツールで設定する必要があります。

<Button ...> 
    <Button.Style> 
     <Style TargetType="Button" BasedOn="{StaticResource Style2}"> 
      <Setter Property="Foreground" Value="White"/> 
     </Style> 
    </Button.Style> 
</Button 
+0

プログラムでバックグラウンドをこのように変更するにはどうすればよいですか? – SMahdiS

+0

スタイルをプログラマチックに設定します。あなたのトリガーでは、背景をまったく変更しない方がいいです。 – Clemens

+0

コードベースでbasedOnを設定する方法がわかりません:Style style = new Style { TargetType = typeof(Button) }; style.Setters.Add(新しいSetter(Control.ForegroundProperty、Brushes.Green)); style.basedOn =? myControl.Style = style; – SMahdiS

1

はローカル値にBackgroundプロパティを設定し、まだボタンの上にマウスを移動するには、ボタンののControlTemplateにトリガを定義することができたときにそれを変更できるようにしたい場合。つまり、MetroCircleButtonStyleベーススタイルをコピーするか、データトリガーをベーススタイルに直接追加する必要があります。

また、Clemensが提案したように、スタイル内にForegroundプロパティを設定することもできます。あなたはこのように、プログラムのスタイルを作成することができます。

Style style = new Style { TargetType = typeof(Button) }; 
style.Setters.Add(new Setter(Control.ForegroundProperty, Brushes.Green)); 
style.BasedOn = FindResource("MetroCircleButtonStyle") as Style; 
button1.Style = style; 
1

は実際にあなたが「ローカル値」より高い優先順位を持つアニメーションでそれを行うことができ、ここでの方法は次のとおりです。

はこのように自分のスタイルを定義します。

<Style TargetType="Button" x:Key="ButtonStyle"> 
     <Style.Triggers> 
      <EventTrigger RoutedEvent="Button.MouseEnter"> 
       <BeginStoryboard> 
        <Storyboard TargetProperty="(Foreground).(SolidColorBrush.Color)"> 
         <ColorAnimation To="Red" Duration="0:0:0"/> 
        </Storyboard> 
       </BeginStoryboard> 
      </EventTrigger> 
     </Style.Triggers> 
    </Style> 

は、あなたは

 <Button Content="Button Title 1" Foreground="Green" Style="{StaticResource ButtonStyle}"/> 
     <Button Content="Button Title 2" Foreground="Blue" Style="{StaticResource ButtonStyle}"/> 

この「トリックのようなあなたのボタンを使用することができます'は、標準のWPFコントロールスタイルとテンプレートで使用されます。

+0

ネイティブコントロールでこのようなトリックを使用するとは信じられません。とにかくありがとう。 – SMahdiS

+0

実際には、[すべてのコントロール](https://msdn.microsoft。com/ja-us/library/aa970773(v = vs.110).aspx) – Shorstok

関連する問題