Programmatically Extract an Element's Style with DefaultStyleKeyProperty
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="WPF" Height="120" Width="220">
<Window.Resources>
<Style x:Key="CustomProgressBarStyle" TargetType="{x:Type ProgressBar}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ProgressBar}">
<Grid>
<Border Name="PART_Track" Background="{DynamicResource {x:Static SystemColors.InactiveCaptionBrushKey}}"
BorderBrush="{DynamicResource {x:Static SystemColors.InactiveBorderBrushKey}}"
BorderThickness="1" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<StackPanel>
<ProgressBar x:Name="MyProgressBar" Value="30" Width="200" HorizontalAlignment="Center" Style="{DynamicResource CustomProgressBarStyle}"/>
<Button Click="Button_Click" Content="Extract Style"/>
</StackPanel>
</Window>
//File:Window.xaml.cs
using System;
using System.Reflection;
using System.Windows;
using System.Windows.Markup;
namespace WpfApplication1
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Type type = typeof(FrameworkElement);
FieldInfo fieldInfo = type.GetField("DefaultStyleKeyProperty",BindingFlags.Static| BindingFlags.NonPublic);
DependencyProperty defaultStyleKeyProperty =(DependencyProperty)fieldInfo.GetValue(MyProgressBar);
object defaultStyleKey = MyProgressBar.GetValue(defaultStyleKeyProperty);
Style style = (Style)Application.Current.FindResource(defaultStyleKey);
string styleXaml = XamlWriter.Save(style);
Console.WriteLine(styleXaml);
}
}
}
Related examples in the same category