2011-09-16 8 views
1

私は以下のようなことをしたいが動作しません。私は自分のデータ型の中で定義したボタンのTagプロパティに整数(または何らかの型)の値を設定するためにdatatriggerを使いたい。ボタンのイメージスタイルの内側では、対応する値がボタンのtagプロパティに設定されているときにトリガーを発生させます。しかし、それはこのように働いているようには見えません。私はx:Null値を設定する場合、私はトリガーを発射することができます、それはロジックが大丈夫であることを意味します。しかし、0または1のような値を設定してもトリガは起動しません。どんな解決策ですか?ボタンのタグプロパティを整数値に設定してトリガーを起動する

<DataTemplate x:Key="SomeDataTemplateofSomeType"> 

<Button x:Name="ButtonVisible"> 
    <Button.Template> 
     <ControlTemplate TargetType="Button"> 
      <Image x:Name="FxImage"> 
        <Image.Style> 
         <Style TargetType="{x:Type Image}"> 
         <Style.Triggers> 
          <DataTrigger Binding="{Binding Tag, RelativeSource={RelativeSource TemplatedParent},UpdateSourceTrigger=PropertyChanged}" Value="0"> 
           <Setter Property="Source" Value="/Resources/controls/images/fxiconsnone.png" /> 
          </DataTrigger> 
         </Style.Triggers> 
         </Style> 
       </Image.Style> 
      </Image> 
     </ControlTemplate> 
    </Button.Template> 
</Button> 

<DataTemplate.Triggers> 
<DataTrigger Binding="{Binding Path=IsVisible, Value="True"> 
    <Setter Property="Tag" TargetName="ButtonVisible" Value="1" /> 
</DataTrigger> 

<DataTrigger Binding="{Binding Path=IsVisible, Value="False"> 
    <Setter Property="Tag" TargetName="ButtonVisible" Value="0" /> 
</DataTrigger> 
</DataTemplate.Triggers> 
</Datatemplate> 

答えて

2

あなたはしていない代わりに、TemplatedParentにテンプレートButton

バインドにImageDataContextに結合されています。サイドノートでは

、真と偽のための2つのDataTriggersを使用する必要はありません。この代わりに

<Button x:Name="ButtonVisible" Tag="1"> 

そして唯一MainWindow.xaml

<StackPanel> 
    <StackPanel.Resources> 
     <DataTemplate x:Key="SomeDataTemplateofSomeType"> 
      <Button x:Name="ButtonVisible"> 
       <Button.Template> 
        <ControlTemplate TargetType="Button"> 
         <Image x:Name="FxImage"> 
          <Image.Style> 
           <Style TargetType="{x:Type Image}"> 
            <Style.Triggers> 
             <DataTrigger Binding="{Binding Tag, RelativeSource={RelativeSource TemplatedParent},UpdateSourceTrigger=PropertyChanged}" Value="0"> 
              <Setter Property="Source" Value="YourImageSource" /> 
             </DataTrigger> 
            </Style.Triggers> 
           </Style> 
          </Image.Style> 
         </Image> 
        </ControlTemplate> 
       </Button.Template> 
      </Button> 
      <DataTemplate.Triggers> 
       <DataTrigger Binding="{Binding Path=IsVisible}" Value="True"> 
        <Setter Property="Tag" TargetName="ButtonVisible" Value="1" /> 
       </DataTrigger> 
       <DataTrigger Binding="{Binding Path=IsVisible}" Value="False"> 
        <Setter Property="Tag" TargetName="ButtonVisible" Value="0" /> 
       </DataTrigger> 
      </DataTemplate.Triggers> 
     </DataTemplate> 
    </StackPanel.Resources> 
    <ContentControl Content="{Binding MySource}" 
        ContentTemplate="{StaticResource SomeDataTemplateofSomeType}"/> 
    <ToggleButton IsChecked="{Binding Path=MySource.IsVisible, Mode=TwoWay}" Content="IsChecked?"/> 
</StackPanel> 

MainWindow.xaml.csに以下を追加して、実施例DataTriggers

<DataTrigger Binding="{Binding Path=IsVisible}" Value="False"> 
    <Setter Property="Tag" TargetName="ButtonVisible" Value="0" /> 
</DataTrigger> 

の1を維持しています

+0

私のコピーペーストからこのコードを忘れてしまった。私のコードはそれのようなものです、私は誤解を避けるために最初の投稿を編集します。それでもこれはうまくいかないので、どうすればいいのか分かりますか? : – muku

+0

@muku:自分のコードを自分のテストプロジェクトにコピーしたので、他の何かが問題になるはずです。あなたのアップデートを確認します –

+0

本当ですか?私のセッターがsetterの値を0または1に変更すると、トリガは発生せず、またsetterの内部で別の値を設定すると、setterがtrueであることを示すテキストブロックテキストが設定されます。私は:) – muku

関連する問題