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>

相关推荐
yuhaiqiang2 分钟前
被 AI 忽悠后,开始怀念搜索引擎了?
前端·后端·面试
红色石头本尊18 分钟前
1-umi-前端工程化搭建
前端
真夜25 分钟前
关于对echart盒子设置百分比读取的宽高没有撑开盒子解决方案
前端
楠木68539 分钟前
RAG 资料库 Demo 完整开发流程
前端·ai编程
肠胃炎1 小时前
挂载方式部署项目
服务器·前端·nginx
像我这样帅的人丶你还1 小时前
使用 Next.js + Prisma + MySQL 开发全栈项目
前端
FPGA小迷弟1 小时前
FPGA 时序约束基础:从时钟定义到输入输出延迟的完整设置
前端·学习·fpga开发·verilog·fpga
毛骗导演1 小时前
@tencent-weixin/openclaw-weixin 插件深度解析(四):API 协议与数据流设计
前端·架构
毛骗导演1 小时前
@tencent-weixin/openclaw-weixin 插件深度解析(二):消息处理系统架构
前端·架构
IT_陈寒2 小时前
深入理解JavaScript:核心原理与最佳实践
前端·人工智能·后端