#146 – Use GetValueSource Method to Find the Source of a Dependency Property Value

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));
        }
Advertisement

About Sean
Software developer in the Twin Cities area, passionate about software development and sailing.

4 Responses to #146 – Use GetValueSource Method to Find the Source of a Dependency Property Value

  1. 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

  2. Joe says:

    How is the value of isEnabled being toggled?

    • Sean says:

      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.

  3. Will says:

    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?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: