Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在当前有焦点的元素周围放置一个亮红色框的可重用方法?_C#_Wpf - Fatal编程技术网

C# 在当前有焦点的元素周围放置一个亮红色框的可重用方法?

C# 在当前有焦点的元素周围放置一个亮红色框的可重用方法?,c#,wpf,C#,Wpf,我有一些主要带有组合框、文本框和复选框的窗口。当你点击一个来获得焦点时,我需要一种方法,用一个彩色的框(老板的命令)来勾勒出它们的轮廓。有没有比覆盖所有这些控件的默认样式更容易的方法?我以前从未这样做过,所以我需要花很多时间才能弄清楚。你可以尝试在需要不同焦点矩形样式的控件中添加一个 从上面链接 第二种机制是提供单独的样式作为属性的值;“焦点视觉样式”为在控件顶部绘制的装饰器创建单独的视觉树,而不是通过替换控件或其他UI元素来更改其视觉树 在窗口的Xaml中类似于此的内容 <Window.

我有一些主要带有组合框、文本框和复选框的窗口。当你点击一个来获得焦点时,我需要一种方法,用一个彩色的框(老板的命令)来勾勒出它们的轮廓。有没有比覆盖所有这些控件的默认样式更容易的方法?我以前从未这样做过,所以我需要花很多时间才能弄清楚。你可以尝试在需要不同焦点矩形样式的控件中添加一个

从上面链接

第二种机制是提供单独的样式作为属性的值;“焦点视觉样式”为在控件顶部绘制的装饰器创建单独的视觉树,而不是通过替换控件或其他UI元素来更改其视觉树

在窗口的Xaml中类似于此的内容

<Window.Resources>
    <Style x:Key="NewFocusVisual">
        <Setter Property="Control.Template">
            <Setter.Value>
                <ControlTemplate>
                    <Border>
                        <Rectangle Stroke="Red"  Margin="2" StrokeThickness="1"  StrokeDashArray="1 2" />
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>

或者您的Application.Xaml文件

<Application.Resources>
    <Style x:Key="NewFocusVisual">
        <Setter Property="Control.Template">
            <Setter.Value>
                <ControlTemplate>
                    <Border>
                        <Rectangle Stroke="Red"  Margin="2" StrokeThickness="1"  StrokeDashArray="1 2" />
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Application.Resources>

用法:

<ComboBox FocusVisualStyle="{StaticResource NewFocusVisual}"  Height="23" HorizontalAlignment="Left" Margin="238,102,0,0" Name="ComboBox1" VerticalAlignment="Top" Width="120" />
<CheckBox FocusVisualStyle="{StaticResource NewFocusVisual}" Content="CheckBox" Height="16" HorizontalAlignment="Left" Margin="238,71,0,0" Name="CheckBox2" VerticalAlignment="Top" />
<TextBox FocusVisualStyle="{StaticResource NewFocusVisual}" Height="23" HorizontalAlignment="Left" Margin="238,144,0,0" Name="TextBox1" VerticalAlignment="Top" Width="120" />


如果要更改每种焦点事件类型的焦点矩形,Microsoft声明:

来自Microsoft:焦点视觉样式专门用于键盘焦点。因此,焦点视觉样式是一种辅助功能。如果希望通过鼠标、键盘或编程方式对任何类型的焦点进行UI更改,则不应使用焦点视觉样式,而应在样式或模板中使用setter和触发器,这些样式或模板根据常规焦点属性(如IsFocus或IsFocusInin)的值工作


试一试它对文本框有效还没有检查其他控件

<Application.Resources>
    <Style TargetType="TextBox" >
        <Style.Triggers>
            <Trigger Property="IsFocused" Value="True">
                <Setter Property="Control.BorderBrush" Value="Red"  />
                <Setter Property="Control.BorderThickness" Value="3" />
            </Trigger>
        </Style.Triggers>
    </Style>

</Application.Resources>

您可以尝试向需要不同焦点矩形样式的控件添加一个

从上面链接

第二种机制是提供单独的样式作为属性的值;“焦点视觉样式”为在控件顶部绘制的装饰器创建单独的视觉树,而不是通过替换控件或其他UI元素来更改其视觉树

在窗口的Xaml中类似于此的内容

<Window.Resources>
    <Style x:Key="NewFocusVisual">
        <Setter Property="Control.Template">
            <Setter.Value>
                <ControlTemplate>
                    <Border>
                        <Rectangle Stroke="Red"  Margin="2" StrokeThickness="1"  StrokeDashArray="1 2" />
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>

或者您的Application.Xaml文件

<Application.Resources>
    <Style x:Key="NewFocusVisual">
        <Setter Property="Control.Template">
            <Setter.Value>
                <ControlTemplate>
                    <Border>
                        <Rectangle Stroke="Red"  Margin="2" StrokeThickness="1"  StrokeDashArray="1 2" />
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Application.Resources>

用法:

<ComboBox FocusVisualStyle="{StaticResource NewFocusVisual}"  Height="23" HorizontalAlignment="Left" Margin="238,102,0,0" Name="ComboBox1" VerticalAlignment="Top" Width="120" />
<CheckBox FocusVisualStyle="{StaticResource NewFocusVisual}" Content="CheckBox" Height="16" HorizontalAlignment="Left" Margin="238,71,0,0" Name="CheckBox2" VerticalAlignment="Top" />
<TextBox FocusVisualStyle="{StaticResource NewFocusVisual}" Height="23" HorizontalAlignment="Left" Margin="238,144,0,0" Name="TextBox1" VerticalAlignment="Top" Width="120" />


如果要更改每种焦点事件类型的焦点矩形,Microsoft声明:

来自Microsoft:焦点视觉样式专门用于键盘焦点。因此,焦点视觉样式是一种辅助功能。如果希望通过鼠标、键盘或编程方式对任何类型的焦点进行UI更改,则不应使用焦点视觉样式,而应在样式或模板中使用setter和触发器,这些样式或模板根据常规焦点属性(如IsFocus或IsFocusInin)的值工作


试一试它对文本框有效还没有检查其他控件

<Application.Resources>
    <Style TargetType="TextBox" >
        <Style.Triggers>
            <Trigger Property="IsFocused" Value="True">
                <Setter Property="Control.BorderBrush" Value="Red"  />
                <Setter Property="Control.BorderThickness" Value="3" />
            </Trigger>
        </Style.Triggers>
    </Style>

</Application.Resources>


有点困惑,我应该把。。。一点在app.xaml?@cost中,它将进入Application.xaml文件的Application.Resources区域。我的意思是,您可以将该代码放入窗口的Xaml文件或应用程序的Xaml文件中。请参见代码编辑。抱歉弄糊涂了好吧,我现在明白了,谢谢。不幸的是,我把它放在app.xaml和我的文本框标记中,但它没有任何影响。知道为什么吗?@cost它似乎只适用于键盘初始化的焦点更改,如果您使用鼠标或通过编程进行更改,它将被禁用。我正在寻找另一种选择。这是一个非常特殊的限制。我真的很感谢你的帮助我有点困惑,我应该把。。。一点在app.xaml?@cost中,它将进入Application.xaml文件的Application.Resources区域。我的意思是,您可以将该代码放入窗口的Xaml文件或应用程序的Xaml文件中。请参见代码编辑。抱歉弄糊涂了好吧,我现在明白了,谢谢。不幸的是,我把它放在app.xaml和我的文本框标记中,但它没有任何影响。知道为什么吗?@cost它似乎只适用于键盘初始化的焦点更改,如果您使用鼠标或通过编程进行更改,它将被禁用。我正在寻找另一种选择。这是一个非常特殊的限制。不过我真的很感谢你的帮助