2012-03-14 7 views
0

を適用します。トリガーは、私は、以下のリソースを持つユーザーコントロールを持っている唯一の二

<UserControl.Resources> 
    <ControlTemplate TargetType="Button" x:Key="tmp1"> 
     <Image Source="Resources/img1.png> 
    </ControlTemplate> 
    <ControlTemplate TargetType="Button" x:Key="tmp2"> 
     <Image Source="Resources/img2.png> 
    </ControlTemplate> 
</UserControl.Resources> 

ボタンは、次のトリガで有効になっているとき、私は、テンプレートを適用しようとしました:

<Style TargetType="Buton"> 
     <Setter Property="Template" Value="{StaticResource tmp1}" /> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding ElementName=btn1, Path=IsEnabled}" Value="True"> 
       <Setter Property="Template" Value="{StaticResource tmp2}"></Setter> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 

何もhappendsを!

しかし、これに耳を傾ける:私は、次のような第2のセッターを追加する場合:(!と全く動かない - マージンが適用されません)

<Style TargetType="Buton"> 
     <Setter Property="Template" Value="{StaticResource tmp1}" /> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding ElementName=btn1, Path=IsEnabled}" Value="True"> 
       <Setter Property="Template" Value="{StaticResource tmp2}"></Setter> 
       <Setter Property="Margin" Value="-6"></Setter> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 

ボタンが変化し、それはテンプレートです。

誰でもこの原因を教えてもらえますか?

+0

'btn1' ..私は....どこでもそれをやった –

答えて

0

"IsEnabled"プロパティを観察するための標準トリガを使用します。このような 何かが

<Page 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Page.Resources> 
<ControlTemplate TargetType="{x:Type Button}" x:Key="tmp1"> 
    <Image Source="img1.png"/> 
</ControlTemplate> 

<ControlTemplate TargetType="{x:Type Button}" x:Key="tmp2"> 
    <Image Source="img2.png"/> 
    </ControlTemplate> 

    <Style TargetType="Button"> 
     <Setter Property="Template" Value="{StaticResource tmp1}" /> 
     <Style.Triggers> 
     <Trigger Property="IsEnabled" Value="False"> 
      <Setter Property="Template" Value="{StaticResource tmp2}"/> 
     </Trigger> 
     </Style.Triggers> 
    </Style> 
    </Page.Resources> 

    <Grid> 
    <Button IsEnabled="False"></Button> 
    </Grid> 
</Page> 

は、この情報がお役に立てば幸いです動作するはずです。

Shounbourgh

+0

おかげで、その要素を参照してください何がいけませんさ。 DataTriggerで何が異常な動作を引き起こしたのか考えていますか? – max12345

+0

...およびDataTriggersは、データの変更をトリガするために使用されます。例えば。要素のDataContextプロパティをコレクションまたはXMLドキュメントにバインドできます。 DataTriggerでは、要素のデータが含まれていることがわかり、トリガーが反応します。詳細については、(DataTemplatesも)私はmsdnのドキュメントを参照することができます:http://msdn.microsoft.com/en-us/library/ms742521.aspx – Shounbourgh

+0

しかし、あなたの質問(私はちょうど私が答えなかったことを認識してあなたの質問:D、sry)...最初は、スタイルのバインディングで "btn1"の使い方と混同しています...これまで何が...マージンはコントロールのMeasureメソッドを呼び出すプロパティです暗黙の意味は、コントロールが再配置され、再レンダリングされることを意味します...しかし、これもスタイルの変更のために発生する必要があります...私は少し神秘的な^ – Shounbourgh

関連する問題