我正在尝试创建一个带有嵌入式放大镜图标的搜索文本框。到目前为止我有以下标记:
<Border DockPanel.Dock="Bottom" Margin="2,4,0,4"
BorderThickness="1" SnapsToDevicePixels="True"
BorderBrush="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}">
<DockPanel>
<StackPanel Orientation="Horizontal" DockPanel.Dock="Right">
<Image Source="/Resources/search-13x13.png" Width="13"/>
</StackPanel>
<TextBox Name="searchTextBox" DockPanel.Dock="Bottom" BorderThickness="0"
Text="{Binding FilterText, UpdateSourceTrigger=PropertyChanged}"/>
</DockPanel>
</Border>
但是,我在 SystemColors 中找不到该条目,该条目将为我提供与标准 TextBox 边框相同的颜色。默认情况下,这是一种蓝色。我真的很傻吗?!?
编辑:顺便说一句,图像包含在堆栈面板中,因为我也计划在其中放置一个下拉箭头。
最佳答案
您可以尝试使用 Microsoft.Windows.Themes.ListBoxChrome 而不是边框;这就是 TextBox 的默认模板使用的内容:
<ControlTemplate TargetType="TextBoxBase"
xmlns:mwt="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero">
<mwt:ListBoxChrome Name="Bd" SnapsToDevicePixels="True">
<ScrollViewer Name="PART_ContentHost"
SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" />
</mwt:ListBoxChrome>
<ControlTemplate.Triggers>
<Trigger Property="UIElement.IsEnabled" Value="False">
<Setter TargetName="Bd" Property="Panel.Background"
Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" />
<Setter Property="TextElement.Foreground"
Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
您应该能够仅使用 ListBoxChrome 而不是 Border,而不是重新模板化 TextBox 以匹配您提供的代码。
关于WPF系统颜色: color of TextBox border,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/955597/