2011-01-21 5 views
1

次のスタイルでは、このスタイルを複数のコンシューマがそれぞれ異なるバインディングパスを使用できるようにバインディングパスを汎用化する方法はありますか?動的パス上のwpfスタイルトリガー

<Style x:Key="OptionalBackground" 
     TargetType="{x:Type DataPresenter:CellValuePresenter}" 
     BasedOn="{StaticResource OptionalFieldCellPresenter}"> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, 
             Path=Record.DataItem.IsEditAllowed}" 
        Value="False"> 
      <Setter Property="Background" Value="{StaticResource ReadOnlyField}" /> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 
+0

短い答え、これができます:かもしれない

<local:BackgroundStyle x:Key="OptionalBackground" TargetType="{x:Type DataPresenter:CellValuePresenter}" BasedOn="{StaticResource OptionalFieldCellPresenter}" Path="Record.DataItem.IsEditAllowed" Value="{StaticResource ReadOnlyField}"/> 

この例の実装を終わらない。あなたのシナリオにもよりますが、いくつかの選択肢があります。理論的には、これをどうしたいですか?構文はどのように見えますか? –

答えて

0

あなたはこのようになります略記作成するStyleから派生することができます:いいえ、

public class BackgroundStyle : Style, ISupportInitialize 
{ 
    public string Path { get; set; } 
    public object Value { get; set; } 

    public void BeginInit() { } 

    public void EndInit() 
    { 
     var trigger = new DataTrigger 
     { 
      Binding = new Binding 
      { 
       Path = new PropertyPath(Path), 
       RelativeSource = new RelativeSource(RelativeSourceMode.Self) 
      }, 
     }; 
     trigger.Setters.Add(new Setter(Control.BackgroundProperty, Value)); 
     Triggers.Add(trigger); 
    } 
} 
関連する問題