| WPF ListBoxItem, TreeViewItem und Button Templates |
| Control / ItemsControl / HeaderedItemsControl / TreeViewItem | Control / ContentControl / ListBoxItem |
<?xml version="1.0" encoding="utf-16" ?> <controltemplate targettype="TreeViewItem" |
<?xml version="1.0" encoding="utf-16" ?> <controltemplate targettype="ListBoxItem" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Border BorderThickness="{TemplateBinding Border.BorderThickness}" Padding="{TemplateBinding Control.Padding}" BorderBrush="{TemplateBinding Border.BorderBrush}" Background="{TemplateBinding Panel.Background}" Name="Bd" SnapsToDevicePixels="True"> <ContentPresenter Content="{TemplateBinding ContentControl.Content}" ContentTemplate="{TemplateBinding ContentControl.ContentTemplate}" HorizontalAlignment="{TemplateBinding Control.HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding Control.VerticalContentAlignment}" SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" /> </Border> <ControlTemplate.Triggers> <Trigger Property="Selector.IsSelected"> <Setter Property="Panel.Background" TargetName="Bd"> <Setter.Value> <DynamicResource ResourceKey="{x:Static SystemColors.HighlightBrushKey}" /> </Setter.Value> </Setter> <Setter Property="TextElement.Foreground"> <Setter.Value> <DynamicResource ResourceKey="{x:Static SystemColors.HighlightTextBrushKey}" /> </Setter.Value> </Setter> <Trigger.Value> <s:Boolean>True</s:Boolean> </Trigger.Value> </Trigger> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="Selector.IsSelected"> <Condition.Value> <s:Boolean>True</s:Boolean> </Condition.Value> </Condition> <Condition Property="Selector.IsSelectionActive"> <Condition.Value> <s:Boolean>False</s:Boolean> </Condition.Value> </Condition> </MultiTrigger.Conditions> <Setter Property="Panel.Background" TargetName="Bd"> <Setter.Value> <DynamicResource ResourceKey="{x:Static SystemColors.ControlBrushKey}" /> </Setter.Value> </Setter> <Setter Property="TextElement.Foreground"> <Setter.Value> <DynamicResource ResourceKey="{x:Static SystemColors.ControlTextBrushKey}" /> </Setter.Value> </Setter> </MultiTrigger> <Trigger Property="UIElement.IsEnabled"> <Setter Property="TextElement.Foreground"> <Setter.Value> <DynamicResource ResourceKey="{x:Static SystemColors.GrayTextBrushKey}" /> </Setter.Value> </Setter> <Trigger.Value> <s:Boolean>False</s:Boolean> </Trigger.Value> </Trigger> </ControlTemplate.Triggers> </controltemplate> |
| Ein Template eines WPF-Objektes anschauen: private void Button_Click(object sender, RoutedEventArgs e) { TemplateAnzeigen(((Button)sender).Template); } /// <summary>Zeigt das Template in XML in einem neuen Fenster an.</summary> /// <param name="template">Zum Beispiel die Template-Eigenschaft des Controls</param> private void TemplateAnzeigen(FrameworkTemplate template) { Window w = new Window(); w.Title = "XAML "; // Verweis auf WindowsFormsIntegration.dll WindowsFormsHost wfh = new WindowsFormsHost(); w.Height = 600; w.Width = 800; if (template is ControlTemplate) w.Title += "für ControlTemplate mit TargetType " + ((ControlTemplate)template).TargetType.Name; else w.Title += "für " + template.GetType().Name; StackPanel sp = new StackPanel(); System.Windows.Forms.WebBrowser wb = new System.Windows.Forms.WebBrowser(); wfh.Child = wb; w.Content = wfh; XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; settings.IndentChars = new string(' ', 4); settings.NewLineOnAttributes = true; StreamWriter sw = new StreamWriter("template.xml", false, Encoding.UTF8); XmlWriter xw = XmlWriter.Create(sw, settings); XamlWriter.Save(template, xw); sw.Close(); wb.Navigate(System.IO.Path.Combine( Directory.GetCurrentDirectory(),"template.xml")); w.ShowDialog(); } Hier das interaktive Template des Buttons nach oben aufgeführter Methode mit dem Design [Windows Vista]: |
|
<?xml version="1.0" encoding="utf-8"?> <ControlTemplate TargetType="ButtonBase" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:mwt="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero"> <mwt:ButtonChrome Background="{TemplateBinding Panel.Background}" BorderBrush="{TemplateBinding Border.BorderBrush}" RenderDefaulted="{TemplateBinding Button.IsDefaulted}" RenderMouseOver="{TemplateBinding UIElement.IsMouseOver}" RenderPressed="{TemplateBinding ButtonBase.IsPressed}" Name="Chrome" SnapsToDevicePixels="True"> <ContentPresenter RecognizesAccessKey="True" Content="{TemplateBinding ContentControl.Content}" ContentTemplate="{TemplateBinding ContentControl.ContentTemplate}" Margin="{TemplateBinding Control.Padding}" HorizontalAlignment="{TemplateBinding Control.HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding Control.VerticalContentAlignment}" SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" /> </mwt:ButtonChrome> <ControlTemplate.Triggers> <Trigger Property="UIElement.IsKeyboardFocused"> <Setter Property="mwt:ButtonChrome.RenderDefaulted" TargetName="Chrome"> <Setter.Value> <s:Boolean>True</s:Boolean> </Setter.Value> </Setter> <Trigger.Value> <s:Boolean>True</s:Boolean> </Trigger.Value> </Trigger> <Trigger Property="ToggleButton.IsChecked"> <Setter Property="mwt:ButtonChrome.RenderPressed" TargetName="Chrome"> <Setter.Value> <s:Boolean>True</s:Boolean> </Setter.Value> </Setter> <Trigger.Value> <s:Boolean>True</s:Boolean> </Trigger.Value> </Trigger> <Trigger Property="UIElement.IsEnabled"> <Setter Property="TextElement.Foreground"> <Setter.Value> <SolidColorBrush>#FFADADAD</SolidColorBrush> </Setter.Value> </Setter> <Trigger.Value> <s:Boolean>False</s:Boolean> </Trigger.Value> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> |
|
|
Hier das interaktive Template des Buttons nach oben aufgeführtem Code mit dem Design [Windows Classic]: |
|
<?xml version="1.0" encoding="utf-8"?> <ControlTemplate TargetType="ButtonBase" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:mwt="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Classic" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <mwt:ClassicBorderDecorator Background="{TemplateBinding Panel.Background}" BorderStyle="Raised" BorderBrush="{TemplateBinding Border.BorderBrush}" BorderThickness="3,3,3,3" Name="ContentContainer" SnapsToDevicePixels="True"> <ContentPresenter RecognizesAccessKey="True" Content="{TemplateBinding ContentControl.Content}" ContentTemplate="{TemplateBinding ContentControl.ContentTemplate}" Margin="{TemplateBinding Control.Padding}" HorizontalAlignment="{TemplateBinding Control.HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding Control.VerticalContentAlignment}" SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" /> </mwt:ClassicBorderDecorator> <ControlTemplate.Triggers> <Trigger Property="UIElement.IsKeyboardFocused"> <Setter Property="mwt:ClassicBorderDecorator.BorderStyle" TargetName="ContentContainer"> <Setter.Value> <x:Static Member="mwt:ClassicBorderStyle.RaisedFocused" /> </Setter.Value> </Setter> <Trigger.Value> <s:Boolean>True</s:Boolean> </Trigger.Value> </Trigger> <Trigger Property="Button.IsDefaulted"> <Setter Property="mwt:ClassicBorderDecorator.BorderStyle" TargetName="ContentContainer"> <Setter.Value> <x:Static Member="mwt:ClassicBorderStyle.RaisedFocused" /> </Setter.Value> </Setter> <Trigger.Value> <s:Boolean>True</s:Boolean> </Trigger.Value> </Trigger> <Trigger Property="ButtonBase.IsPressed"> <Setter Property="mwt:ClassicBorderDecorator.BorderStyle" TargetName="ContentContainer"> <Setter.Value> <x:Static Member="mwt:ClassicBorderStyle.RaisedPressed" /> </Setter.Value> </Setter> <Trigger.Value> <s:Boolean>True</s:Boolean> </Trigger.Value> </Trigger> <Trigger Property="ToggleButton.IsChecked"> <Setter Property="mwt:ClassicBorderDecorator.BorderStyle" TargetName="ContentContainer"> <Setter.Value> <x:Static Member="mwt:ClassicBorderStyle.RaisedPressed" /> </Setter.Value> </Setter> <Trigger.Value> <s:Boolean>True</s:Boolean> </Trigger.Value> </Trigger> <Trigger Property="UIElement.IsEnabled"> <Setter Property="TextElement.Foreground"> <Setter.Value> <DynamicResource ResourceKey="{x:Static SystemColors.GrayTextBrushKey}" /> </Setter.Value> </Setter> <Trigger.Value> <s:Boolean>False</s:Boolean> </Trigger.Value> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> |
|