Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jul 4th, 2012  |  syntax: None  |  size: 1.34 KB  |  hits: 12  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. wpf style trigger on dynamic path
  2. <Style x:Key="OptionalBackground"
  3.        TargetType="{x:Type DataPresenter:CellValuePresenter}"
  4.        BasedOn="{StaticResource OptionalFieldCellPresenter}">
  5.     <Style.Triggers>
  6.         <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self},
  7.                                        Path=Record.DataItem.IsEditAllowed}"
  8.                      Value="False">
  9.             <Setter Property="Background" Value="{StaticResource ReadOnlyField}" />
  10.         </DataTrigger>
  11.     </Style.Triggers>
  12. </Style>
  13.        
  14. <local:BackgroundStyle
  15.     x:Key="OptionalBackground"
  16.     TargetType="{x:Type DataPresenter:CellValuePresenter}"
  17.     BasedOn="{StaticResource OptionalFieldCellPresenter}"
  18.     Path="Record.DataItem.IsEditAllowed"
  19.     Value="{StaticResource ReadOnlyField}"/>
  20.        
  21. public class BackgroundStyle : Style, ISupportInitialize
  22. {
  23.     public string Path { get; set; }
  24.     public object Value { get; set; }
  25.  
  26.     public void BeginInit() { }
  27.  
  28.     public void EndInit()
  29.     {
  30.         var trigger = new DataTrigger
  31.         {
  32.             Binding = new Binding
  33.             {
  34.                 Path = new PropertyPath(Path),
  35.                 RelativeSource = new RelativeSource(RelativeSourceMode.Self)
  36.             },
  37.         };
  38.         trigger.Setters.Add(new Setter(Control.BackgroundProperty, Value));
  39.         Triggers.Add(trigger);
  40.     }
  41. }