Mega Code Archive

 
Categories / VB.Net Tutorial / WPF
 

Programmatically Extract an Elements 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.vb Imports System Imports System.Reflection Imports System.Windows Imports System.Windows.Markup Namespace WpfApplication1   Public Partial Class Window1     Inherits Window     Public Sub New()       InitializeComponent()     End Sub     Private Sub Button_Click(sender As Object, e As RoutedEventArgs)       Dim type As Type = GetType(FrameworkElement)       Dim fieldInfo As FieldInfo = type.GetField("DefaultStyleKeyProperty", BindingFlags.[Static] Or BindingFlags.NonPublic)       Dim defaultStyleKeyProperty As DependencyProperty = DirectCast(fieldInfo.GetValue(MyProgressBar), DependencyProperty)       Dim defaultStyleKey As Object = MyProgressBar.GetValue(defaultStyleKeyProperty)       Dim style As Style = DirectCast(Application.Current.FindResource(defaultStyleKey), Style)       Dim styleXaml As String = XamlWriter.Save(style)       Console.WriteLine(styleXaml)     End Sub   End Class End Namespace