问题描述
我已经为我的TextBox定义了一个控件模板,以实现以下目的:
代码很简单:
<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键将焦点移到控件上时,被聚焦的控件正确地变为红色。
但是,如果我直接单击该控件,则不会。
就像内部TextBox的焦点不被视为模板控件的焦点一样,这是有道理的。我曾想通过触发器设置它,但这是一个只读属性。
有什么灵巧的解决方案?
请注意,此问题与ControlTemplate中的焦点处理有关,因此与此问题有所不同。
一个类似的问题
有人建议我有一个类似的问题here 当前,所有这些解决方案中,只有一个不是基于ControlTemplate。 相反,此问题侧重于针对TextBox的最基本ControlTemplate的有效实现,尤其是如何使焦点正常工作。与该问题的视觉相似性来自于我为使事情保持简单而付出的努力,因此我想到了“简单装饰的文本框”。该示例可能基于具有控件的丰富文本框,该控件以不同方式显示验证错误等。这里的问题是如何使焦点起作用,而不是如何向文本框添加提示文本或其他修饰方式。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)