wpf3d游戏引擎前端ControlTemplate实现

1.ControlTemplates.xaml

<ResourceDictionary

x:Class="PrimalEditor.Dictionaries.ControlTemplates"

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:local="clr-namespace:PrimalEditor.Dictionaries"

xmlns:utl="clr-namespace:PrimalEditor.Utilities.Controls"

xmlns:wpf="http://schemas.microsoft.com/netfx/2009/xaml/presentation">

<!-- LightTextBlockStyle: Style for TextBlock -->

<Style TargetType="{x:Type TextBlock}" x:Key="LightTextBlockStyle">

<Setter Property="Foreground" Value="{StaticResource Editor.FontBrush}"/>

<Setter Property="VerticalAlignment" Value="Center"/>

<Setter Property="HorizontalAlignment" Value="Left"/>

</Style>

<!-- LightTextBoxStyle: Style for TextBox with specific background and borders -->

<Style TargetType="{x:Type TextBox}" x:Key="LightTextBoxStyle">

<Setter Property="Foreground" Value="{StaticResource Editor.FontBrush}"/>

<Setter Property="Background" Value="{StaticResource Editor.Window.GrayBrush2}"/>

<Setter Property="BorderBrush" Value="{StaticResource Editor.Window.GrayBrush4}"/>

<Setter Property="SelectionBrush" Value="White"/>

<Setter Property="VerticalAlignment" Value="Center"/>

<Setter Property="HorizontalAlignment" Value="Stretch"/>

<Setter Property="Padding" Value="0,2"/>

</Style>

<!-- TextBoxStyle_WithRename: Extended style with KeyDown and LostFocus handlers -->

<Style TargetType="{x:Type TextBox}" x:Key="TextBoxStyle_WithRename" BasedOn="{StaticResource LightTextBoxStyle}">

<EventSetter Event="KeyDown" Handler="OnTextBoxRename_KeyDown"/>

<EventSetter Event="LostFocus" Handler="OnTextBoxRename_LostFocus"/>

</Style>

<!-- FocusVisual: Focus visual for controls like buttons -->

<Style x:Key="FocusVisual">

<Setter Property="Control.Template">

<Setter.Value>

<ControlTemplate>

<Rectangle Margin="2" StrokeDashArray="1 2" SnapsToDevicePixels="true" StrokeThickness="1" Stroke="{StaticResource Editor.FontBrush}"/>

</ControlTemplate>

</Setter.Value>

</Setter>

</Style>

<!-- ButtonStyle: Style for Button with gradient background and border -->

<Style TargetType="{x:Type Button}">

<Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}"/>

<Setter Property="Background">

<Setter.Value>

<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">

<GradientStop Color="{StaticResource Editor.Window.GrayColor5}" Offset="0"/>

<GradientStop Color="{StaticResource Editor.Window.GrayColor4}" Offset="1"/>

</LinearGradientBrush>

</Setter.Value>

</Setter>

<Setter Property="BorderBrush">

<Setter.Value>

<LinearGradientBrush>

<GradientStop Color="{StaticResource Editor.Window.GrayColor5}" Offset="0"/>

<GradientStop Color="{StaticResource Editor.Window.GrayColor2}" Offset="1"/>

</LinearGradientBrush>

</Setter.Value>

</Setter>

<Setter Property="Foreground" Value="{StaticResource Editor.FontBrush}"/>

<Setter Property="BorderThickness" Value="0,1"/>

<Setter Property="HorizontalContentAlignment" Value="Center"/>

<Setter Property="VerticalContentAlignment" Value="Center"/>

<Setter Property="Padding" Value="5,3"/>

<Setter Property="Template">

<Setter.Value>

<ControlTemplate TargetType="{x:Type Button}">

<Grid>

<Border x:Name="border" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" SnapsToDevicePixels="true" CornerRadius="3"/>

<Border x:Name="borderSelected" SnapsToDevicePixels="true" CornerRadius="3" BorderThickness="0" BorderBrush="Transparent"/>

<ContentPresenter x:Name="contentPresenter" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>

</Grid>

<ControlTemplate.Triggers>

<Trigger Property="IsDefaulted" Value="true">

<Setter Property="Background" TargetName="borderSelected" Value="{StaticResource Editor.Selected.BackgroundBrush}"/>

<Setter Property="OpacityMask" TargetName="borderSelected" Value="{StaticResource Button.Selected.OpacityBrush}"/>

</Trigger>

<Trigger Property="IsMouseOver" Value="true">

<Setter Property="TextBlock.Foreground" TargetName="contentPresenter" Value="White" />

<Setter Property="Background" TargetName="borderSelected" Value="{StaticResource Editor.Selected.BackgroundBrush}"/>

<Setter Property="OpacityMask" TargetName="borderSelected" Value="{StaticResource Button.Selected.OpacityBrush}"/>

</Trigger>

<Trigger Property="IsPressed" Value="true">

<Setter Property="TextBlock.Foreground" TargetName="contentPresenter" Value="White" />

<Setter Property="Background" TargetName="borderSelected" Value="{StaticResource Editor.Selected.BackgroundBrush}"/>

<Setter Property="OpacityMask" TargetName="borderSelected" Value="{StaticResource Button.Pressed.OpacityBrush}"/>

</Trigger>

<Trigger Property="IsEnabled" Value="false">

<Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="{StaticResource Editor.Disabled.FontBrush}" />

<Setter Property="Background" TargetName="border" Value="{StaticResource Button.Disabled.BackgroundBrush}"/>

<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource Button.Disabled.BorderBrush}"/>

</Trigger>

</ControlTemplate.Triggers>

</ControlTemplate>

</Setter.Value>

</Setter>

</Style>

<!-- ListBoxItemStyle: Style for ListBoxItem with selection and mouseover effects -->

<Style TargetType="{x:Type ListBoxItem}" x:Key="ListBoxItemStyle">

<Setter Property="SnapsToDevicePixels" Value="True" />

<Setter Property="Padding" Value="4,2,0,2" />

<Setter Property="HorizontalContentAlignment" Value="{Binding HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>

<Setter Property="VerticalContentAlignment" Value="{Binding VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>

<Setter Property="Background" Value="Transparent" />

<Setter Property="BorderBrush" Value="Transparent" />

<Setter Property="BorderThickness" Value="0" />

<Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}" />

<Setter Property="Template">

<Setter.Value>

<ControlTemplate TargetType="{x:Type ListBoxItem}">

<Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true">

<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>

</Border>

<ControlTemplate.Triggers>

<MultiTrigger>

<MultiTrigger.Conditions>

<Condition Property="Selector.IsSelectionActive" Value="False" />

<Condition Property="IsSelected" Value="True" />

</MultiTrigger.Conditions>

<Setter TargetName="Bd" Property="Background" Value="{StaticResource Editor.Window.GrayBrush4}" />

</MultiTrigger>

<MultiTrigger>

<MultiTrigger.Conditions>

<Condition Property="Selector.IsSelectionActive" Value="True" />

<Condition Property="IsSelected" Value="True" />

</MultiTrigger.Conditions>

<Setter TargetName="Bd" Property="Background" Value="{StaticResource Editor.Selected.BackgroundBrush}" />

</MultiTrigger>

<MultiTrigger>

<MultiTrigger.Conditions>

<Condition Property="IsMouseOver" Value="True" />

<Condition Property="Selector.IsSelectionActive" Value="True" />

<Condition Property="IsSelected" Value="False"/>

</MultiTrigger.Conditions>

<Setter TargetName="Bd" Property="Background">

<Setter.Value>

<SolidColorBrush Color="{StaticResource Editor.Selected.BackgroundColor}" Opacity="0.5"/>

</Setter.Value>

</Setter>

</MultiTrigger>

<MultiTrigger>

<MultiTrigger.Conditions>

<Condition Property="IsMouseOver" Value="True" />

<Condition Property="Selector.IsSelectionActive" Value="False" />

<Condition Property="IsSelected" Value="False"/>

</MultiTrigger.Conditions>

<Setter TargetName="Bd" Property="Background" Value="{StaticResource Editor.Window.GrayBrush4}" />

</MultiTrigger>

<Trigger Property="IsEnabled" Value="False">

<Setter TargetName="Bd" Property="TextElement.Foreground" Value="{StaticResource Editor.Disabled.FontBrush}"/>

</Trigger>

</ControlTemplate.Triggers>

</ControlTemplate>

</Setter.Value>

</Setter>

</Style>

</ResourceDictionary>

相关推荐
CC码码7 分钟前
解决前端多标签页通信:BroadcastChannel
前端·javascript·web
墨鸦_Cormorant12 分钟前
Vue 概述以及基本使用
前端·javascript·vue.js
JarvanMo25 分钟前
10 个能帮你节省大量开发时间的低估 Flutter 组件
前端
去伪存真28 分钟前
公司前端项目ESLint规则集统一化
前端
鹏多多31 分钟前
使用imaskjs实现js表单输入卡号/日期/货币等掩码的教程
前端·javascript·vue.js
w2vmany33 分钟前
postmessage xss初步学习
前端·学习·xss
小张成长计划..1 小时前
前端6:CSS3 2D转换,CSS3动画,CSS3 3D转换
前端·3d·css3
IT_陈寒1 小时前
Vue3性能优化实战:这7个技巧让我的应用加载速度提升50%!
前端·人工智能·后端
西西学代码2 小时前
Flutter---音效模式选择器
前端·html
TLucas2 小时前
Layui连线题编辑器组件(ConnectQuestion)
前端·编辑器·layui