#146 – Use GetValueSource Method to Find the Source of a Dependency Property Value
December 5, 2010 4 Comments
It’s often helpful to determine the source of the current value of a dependency property. You can use the DependencyPropertyHelper.GetValueSource method to do this.
In the following example, the source for the value of the Foreground property alternates between the style and the style trigger, based on the value of the IsEnabled property.
<Window.Resources> <Style x:Key="redgreenButton" TargetType="{x:Type Button}"> <Setter Property="Foreground" Value="Green"/> <Style.Triggers> <Trigger Property="IsEnabled" Value="False"> <Setter Property="Foreground" Value="Red"/> </Trigger> </Style.Triggers> </Style> </Window.Resources> <StackPanel Orientation="Vertical"> <Button Content="A Button" Height="23" Width="75" Style="{StaticResource redgreenButton}" Name="btnTest"/> <Button Content="Enable/Disable" Height="24" Width="100" Name="btnDisable" Click="btnDisable_Click"/> <Button Content="Display Source" Height="24" Width="100" Name="btnDisplay" Click="btnDisplay_Click"/> </StackPanel>
Here’s the code for the Display button’s Click event, which uses GetValueSource to report the base value source.
private void btnDisplay_Click(object sender, RoutedEventArgs e) { ValueSource vs = DependencyPropertyHelper.GetValueSource(btnTest as DependencyObject, Button.ForegroundProperty); MessageBox.Show(string.Format("Source for Foreground property: {0}", vs.BaseValueSource)); }
Pingback: Tweets that mention #146 – Use GetValueSource Method to Find the Source of a Dependency Property Value « 2,000 Things You Should Know About WPF -- Topsy.com
How is the value of isEnabled being toggled?
The code isn’t shown in this post, for simplicity. But you’d just set the Enabled property of the button from the Click event handler for the Enable/Disable button.
This doesn’t seem to work. How are you suppressing the default disabled style of the button to show a red foreground from the style trigger?