#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));
        }
Advertisements