我创建了一个从WPF TextBox继承的自定义控件。
我的控制模板只需在文本框上添加一个小按钮,以便更快地删除文本。
但是,我注意到当我的textBox得到焦点时,它的边框不会像经典文本框那样改变(蓝色)。
我会保留原始textBox的所有方面,就像控件获得焦点时的边框一样。
我错过了什么吗?
@@ EDIT
<TextBox x:Class="XTextBox.WKTextBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
Height="23" Width="200"
>
<TextBox.Resources>
<ControlTemplate x:Key="IconButton" TargetType="{x:Type ToggleButton}">
<Border>
<ContentPresenter />
</Border>
</ControlTemplate>
</TextBox.Resources>
<TextBox.Style>
<Style TargetType="TextBox">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBox}">
<Grid>
<Border BorderThickness="1" BorderBrush="DarkGray">
<ScrollViewer x:Name="PART_ContentHost" />
</Border>
<ToggleButton Template="{StaticResource IconButton}"
MaxHeight="21"
Margin="-1,0,0,0"
Name="imgButton"
Focusable="False"
IsChecked="False">
<Image Name="imgClearText" Source="Images\x.png" Stretch="Uniform" Opacity="0.5" Visibility="Visible" HorizontalAlignment="Right" >
</Image>
</ToggleButton>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</TextBox.Style>
答案 0 :(得分:1)
不幸的是,您不能在不失去功能的情况下Replace part of default template in WPF。 我相信最简单的解决方案是下载Blend(它附带VS2015)。打开它,创建一个emty文本框并编辑其模板:
Blend将制作默认模板的副本,因此您不会失去任何默认行为,例如选择,焦点等。 然后你可以保存一个项目,在VS中打开它并根据需要重构它。喜欢将风格移到字典或其他东西。
答案 1 :(得分:0)
您可以通过为GotFocus&amp;添加处理程序手动获得相同的效果。边框的LostFocus事件,并设置您想要的高光颜色。
<Border BorderThickness="1" BorderBrush="DarkGray" LostFocus="Border_LostFocus" GotFocus="Border_GotFocus">
并在.cs文件中
private void Border_LostFocus(object sender, RoutedEventArgs e)
{
((Border)sender).BorderBrush = new SolidColorBrush(Colors.DarkGray);
}
private void Border_GotFocus(object sender, RoutedEventArgs e)
{
((Border)sender).BorderBrush = new SolidColorBrush(Colors.LightBlue);
}