在视觉工作室中设置窗口样式

本文关键字:窗口 样式 设置 视觉 工作室 | 更新日期: 2023-09-27 17:55:16

我的问题是,我创建了一个文本框,当有人点击它时,它会加粗。我希望当我单击屏幕上的其他地方时它不加粗。现在,这是我需要在样式表中执行此操作的困难部分,并且.cs表连接到样式表。我的.cs表的内容是

using System.Windows;
using System.Windows.Input;
namespace SimTechGUI
{
    public partial class MyResourceDictionary : ResourceDictionary
{ 
   public MyResourceDictionary()
   {
      InitializeComponent();
   }
   private void Window_Focus(object sender, MouseButtonEventArgs e)
   {
       Keyboard.ClearFocus();
   }
}
}

我的 xaml 样式表看起来像

<ResourceDictionary      xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors"  
                xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                x:Class="SimTechGUI.MyResourceDictionary"
                x:ClassModifier="public">
<Style TargetType="{x:Type Window}">
    <EventSetter Event="MouseDown" Handler="Window_Focus" />
</Style>

<Style TargetType="{x:Type TextBox}">
    <Setter Property="SnapsToDevicePixels" Value="True" />
    <Setter Property="OverridesDefaultStyle" Value="True" />
    <Setter Property="FocusVisualStyle" Value="{x:Null}" />
    <Setter Property="MinWidth" Value="120" />
    <Setter Property="MinHeight" Value="25" />
    <Setter Property="AllowDrop" Value="true" />
    <Setter Property="FontSize" Value="16"/>
    <Setter Property="FontFamily" Value="Arial"/>
    <Setter Property="VerticalContentAlignment" Value="Center"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type TextBoxBase}">
                <Border Name="Border" CornerRadius="6" Padding="2" BorderBrush="Black" BorderThickness="2,1">
                    <ScrollViewer Margin="0" x:Name="PART_ContentHost" />
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsKeyboardFocusWithin" Value="True">
                        <Setter Property="BorderThickness" TargetName="Border" Value="3"/>                            
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
</ResourceDictionary>

我所拥有的目前不起作用。有谁知道我必须做什么才能完成这项工作。

在视觉工作室中设置窗口样式

如果直接在窗口上设置 MouseDown 事件处理程序,则代码工作正常

MouseDown="Window_Focus"

应用样式的方式,Window_Focus处理程序永远不会命中。 在 Keyboard.ClearFocus() 上放置一个断点;看看它是否击中?

您可以按名称显式应用样式定义如下样式:

        <Style x:Key="windowStyle" TargetType="Window">
            <EventSetter Event="MouseDown" Handler="Window_Focus" />
        </Style>

并像这样应用于所有窗口:

Style="{StaticResource windowStyle}"

我认为它不允许您隐式指定样式的原因是可能已经将样式应用于所有Windows:

看看这些帖子:哪些原因会阻止显式和隐式样式的应用?

或 全局样式在 WPF 中不起作用