2016-09-09 7 views
1

バインディングを使用して背景色を変更したいと思います。 Style="{DynamicResource ButtonStyle}"を使用しないと、背景が変わります。これは私のコードです:WPF - 背景ボタンの変更

<Button Style="{DynamicResource ButtonStyle}" Content="{Binding Title, UpdateSourceTrigger=PropertyChanged}" 
         Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}, Path=DataContext.SelectButton}" 
         CommandParameter="{Binding}" ToolTip="{Binding Description}"> 
        <Button.Resources> 
         <Style TargetType="{x:Type Button}"> 
          <Style.Triggers> 
           <DataTrigger Binding="{Binding IsSelected, UpdateSourceTrigger=PropertyChanged}" Value="True"> 
            <Setter Property="Background" Value="Red"></Setter> 
           </DataTrigger> 

           <DataTrigger Binding="{Binding IsSelected, UpdateSourceTrigger=PropertyChanged}" Value="False"> 
            <Setter Property="Background" Value="Blue"></Setter> 
           </DataTrigger> 
          </Style.Triggers> 
         </Style> 
        </Button.Resources> 
       </Button> 

トリガーを使用してボタンの背景色を変更する方法はありますか?スタイルへの参照を挿入するトリガーになる可能性がありますか?

+0

とボタンが 'DynamicResource'として' ButtonStyle'を使用する必要がありますか?そのスタイルを 'StaticResource'として参照することができれば、この' ButtonStyle'ボタンとそれに対するあなたのtiggersボタンの 'BasedOn'スタイルを作成することができます。この[回答](http://stackoverflow.com/a/9326453/587690)を参照してください。 – sthotakura

答えて

2

ボタンまたはスタイルのコントロールテンプレートにトリガを適用できない場合は、スタイルコンバータではなく値コンバータを使用できます。

Background="{Binding IsSelected, Converter={StaticResource SelectedToBackgroundConverter}}" 

やスタイル

<Style x:Key="ButtonStyle2" TargetType="{x:Type Button}"> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding IsSelected}" Value="True"> 
      <Setter Property="Background" Value="Red"/> 
     </DataTrigger> 
     <DataTrigger Binding="{Binding IsSelected}" Value="False"> 
      <Setter Property="Background" Value="Blue"/> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 

またはコントロールテンプレート

<Style x:Key="ButtonStyle1" TargetType="{x:Type Button}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Button}"> 
       <Grid x:Name="myGrid" Width="200" Height="20" Background="{TemplateBinding Background}"> 
       </Grid> 
       <ControlTemplate.Triggers> 
        <DataTrigger Binding="{Binding IsSelected}" Value="True"> 
         <Setter TargetName="myGrid" Property="Background" Value="Red"/> 
        </DataTrigger> 
        <DataTrigger Binding="{Binding IsSelected}" Value="False"> 
         <Setter TargetName="myGrid" Property="Background" Value="Blue"/> 
        </DataTrigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
関連する問題