Programmatically Extract an Element's Style with DefaultStyleKeyProperty : Key Event « Windows Presentation Foundation « C# / C Sharp






Programmatically Extract an Element's Style with DefaultStyleKeyProperty

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

1.Query Left / Right control keyQuery Left / Right control key
2.Query Left / Right Shift keyQuery Left / Right Shift key
3.Is Key.CapsLock ToggledIs Key.CapsLock Toggled
4.Keyboard.IsKeyToggledKeyboard.IsKeyToggled
5.Query Number lock keyQuery Number lock key
6.Use Keyboard.Focus to set the focus to a Text FieldUse Keyboard.Focus to set the focus to a Text Field
7.Provide Quick Keyboard Access to ButtonsProvide Quick Keyboard Access to Buttons
8.Reading keyboard modifiersReading keyboard modifiers
9.Reading individual key state with Keyboard.IsKeyDownReading individual key state with Keyboard.IsKeyDown
10.Suppress Keyboard and Mouse EventsSuppress Keyboard and Mouse Events
11.Use KeyBinding to bind Key event to TextBox.InputBindingsUse KeyBinding to bind Key event to TextBox.InputBindings
12.StackPanel PreviewTextInput and PreviewKeyDownStackPanel PreviewTextInput and PreviewKeyDown
13.If input is not a number do not handle the key eventIf input is not a number do not handle the key event
14.On Key Down HandlerOn Key Down Handler