WPF ControlTemplate for TextBox,当内部TextBox获得焦点时,模板控件失去焦点 一个类似的问题

问题描述

我已经为我的TextBox定义了一个控件模板,以实现以下目的:

My starting control template

代码很简单:

<ControlTemplate targettype="TextBox" x:Key="TextBoxTemplate">
<Border Name="Border" BorderBrush="blue" BorderThickness="1">
    <Grid>
        <Grid.ColumnDeFinitions>
            <ColumnDeFinition Width="Auto"/>
            <ColumnDeFinition/>
        </Grid.ColumnDeFinitions>
        <Label Name="Label"
               Grid.Column="0"
               VerticalContentAlignment="Center"
               Width="18" 
               VerticalAlignment="Stretch" 
               Background="Blue" 
               Foreground ="white" 
               FontWeight="Bold"
               FontSize="14"
               Content=">"/>
        <TextBox Name="InnerTextBox"
                 BorderBrush="{x:Null}" VerticalContentAlignment="Center" Grid.Column="1" 
                 Text="{TemplateBinding Text}" HorizontalAlignment="Stretch"
                 
                 />
    </Grid>
</Border>
    
</ControlTemplate>

现在,我希望当控件被关注时,边框和标签会更改其颜色并变为红色。

所以我添加了以下内容

<ControlTemplate.Triggers>
    <Trigger Property="IsFocused" Value="True">
        <Setter TargetName="Label" Property="Background" Value="Red"/>
        <Setter TargetName="Border" Property="BorderBrush" Value="Red"/>
    </Trigger>      
</ControlTemplate.Triggers>

现在,当我使用Tab键将焦点移到控件上时,被聚焦的控件正确地变为红色。

Correct behavior

但是,如果我直接单击该控件,则不会。 就像内部TextBox的焦点不被视为模板控件的焦点一样,这是有道理的。我曾想通过触发器设置它,但这是一个只读属性
有什么灵巧的解决方案?

请注意,此问题与ControlTemplate中的焦点处理有关,因此与此问题有所不同。

一个类似的问题

有人建议我有一个类似的问题here 当前,所有这些解决方案中,只有一个不是基于ControlTemplate。 相反,此问题侧重于针对TextBox的最基本ControlTemplate的有效实现,尤其是如何使焦点正常工作。与该问题的视觉相似性来自于我为使事情保持简单而付出的努力,因此我想到了“简单装饰的文本框”。该示例可能基于具有控件的丰富文本框,该控件以不同方式显示验证错误等。这里的问题是如何使焦点起作用,而不是如何向文本框添加提示文本或其他修饰方式。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...