2016-09-15 3 views
1

ボタン用のスタイルがあります。ボタンが有効かどうかによって、背景を変更したいと思います。これは、次のようになります。DataTriggerを使用してスタイル内のセルにバインドする

<Style x:Key="MyButtonStyle" TargetType="Button"> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=Button}, Path=IsEnabled, PresentationTraceSources.TraceLevel=High}" Value="False"> 
      <Setter Property="Background" Value="Purple"/> 
     </DataTrigger> 
     <DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=Button}, Path=IsEnabled, PresentationTraceSources.TraceLevel=High}" Value="True"> 
      <Setter Property="Background" Value="Yellow"/> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 

これは単なる基本例です。実際にはMultiDataTriggerが必要ですが、通常のDataTriggerでは動作しません。私が見るのはグレーのボタンだけです。

これはトレースである:

System.Windows.Data警告:56:作成結合についてBindingExpression(ハッシュ= 31767240)(ハッシュ= 6303779)
System.Windows.Data警告:58:パス: 'でIsEnabled'
System.Windows.Data警告:60:BindingExpression(ハッシュ= 31767240):61:BindingExpression(= 31767240ハッシュ)に解決デフォルト更新トリガデフォルトモードが一方向
System.Windows.Data警告に解決PropertyChanged
System.Windows.Data警告:62:BindingExpression(ハッシュ= 31 System.Windows.Data警告:66:BindingExpression(ハッシュ= 31767240):RelativeSource(FindAncestor)にはツリーコンテキストが必要です
System.Windows.Controls.Button.NoTarget(Attach to System.Windows.Controls.Button.NoTarget)データの警告:65:BindingExpression(ハッシュ= 31767240):ソースの解決を延期
System.Windows.Data警告:67:BindingExpression(ハッシュ= 31767240):ソースの解決
System.Windows.Data警告:70:BindingExpression(ハッシュ= ):Foundデータコンテキスト要素:(OK)
System.Windows.Data警告:73:Button型照会先の祖先:クエリグリッド(ハッシュ= 35377238)
System.Windows.Data警告:73:型の祖​​先を検索します。 Bu System.Windows.Data警告:73:Button型の祖先を参照します。クエリの境界線(ハッシュ= 48541090)
System.Windows.Data警告:73:Button型の祖先を参照します。 (ハッシュ= 22721178)
System.Windows.Data警告:73:Buttonの照会先祖を照会しました:クエリされたグリッド(ハッシュ= 32321338)
System.Windows.Data警告:73:Buttonの照会祖先:照会されたContentPresenter (ハッシュ= 31184590)
System.Windows.Data警告:73:Button型の祖先を参照します。クエリの境界線(ハッシュ= 37117888)
System.Windows.Data警告:73:Button型の祖先を参照します。 PanelControl(hash = 873549)
System.Windows.Data警告:73:Button型の祖先を検索します。クエリされたグリッド(ハッシュ= 29953511)
System.Windows.Data警告:73:Button型の祖先を照会しました。ContentPresenter System.Windows.Data警告:73:Button型の祖先を検索します。クエリの祖先を参照します。クエリの祖先を照会します。ハッシュ= 42576376
System.Windows.Data警告: 23566381)
System.Windows.Data警告:73:型ボタンのルックアップ祖先:照会メインウィンドウ(ハッシュ= 38392424)

ボタンが配置されているグリッドから始まる全体のビジュアルツリーを通り抜けているように見えますが、なぜボタンで始まらないのですか?

+0

私の答えがあなたを助けてくれたなら、気にしないならチェックボックスを "答え"としてください。 –

答えて

6

なぜそれをトリガーに変更しないでください。

<Style x:Key="MyButtonStyle" 
      TargetType="Button"> 
     <Style.Triggers> 
      <Trigger Property="IsEnabled" 
        Value="False"> 
       <Setter Property="Background" 
         Value="Purple" /> 
      </Trigger> 
      <Trigger Property="IsEnabled" 
        Value="True"> 
       <Setter Property="Background" 
         Value="Yellow" /> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 

それとも、とにかくそれを使用したい場合は、ボタンの上に現在だから、あなたは、祖先を見つける必要がありません。

<Style x:Key="MyButtonStyle" 
      TargetType="Button"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsEnabled, PresentationTraceSources.TraceLevel=High}" 
         Value="False"> 
       <Setter Property="Background" 
         Value="Purple" /> 
      </DataTrigger> 
      <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsEnabled, PresentationTraceSources.TraceLevel=High}" 
         Value="True"> 
       <Setter Property="Background" 
         Value="Yellow" /> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 

それはあなたを助けるしない場合は、詳細を伝える必要があります。元のXAMLコード、おそらくView Modelのコードです。

+0

私はViewModelからプロパティにアクセスしたいので、DataTriggerを使用する必要があります。あなたの2番目の例を試してみると、Intellisenseはエラーを表示しますが、コンパイルして実行できるようです。私はエラーを再構築できるかどうか見ていきます。今までありがとう。 – gartenriese

+0

それは動作しますが、何とかIntellisenseはそれをエラーとして表示します。私はそれで生きることができると思う。 – gartenriese

+0

@ Mr.B DataTriggerの代わりにTriggerを使用することを提案しました。しかし、どんな考え?ありがとう –

関連する問題