WPF SystemColor:文本框边框的颜色

WPF SystemColor:文本框边框的颜色,wpf,xaml,styling,Wpf,Xaml,Styling,我正在尝试制作一个带有内置放大镜图标的搜索文本框。到目前为止,我有以下标记: <Border DockPanel.Dock="Bottom" Margin="2,4,0,4" BorderThickness="1" SnapsToDevicePixels="True" BorderBrush="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}"> <DockPa

我正在尝试制作一个带有内置放大镜图标的搜索文本框。到目前为止,我有以下标记:

<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>

但是,我在SystemColor中找不到该条目,它将为我提供与标准文本框边框相同的颜色。默认情况下,这是蓝色。我真的很蠢吗


编辑:顺便说一句,图像包含在stackpanel中,因为我计划在其中放置一个下拉箭头。

您可以尝试使用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.BorderBrush = SystemColors.ControlDarkBrush;

这看起来很粗糙,但我最幸运的是创建了一个文本框(可能是折叠的)并绑定到它的边框笔刷上。

对于任何正在寻找笔刷列表以及不同主题/OS下它们的颜色的人


我想看看这里:

根据尼古拉斯·阿姆斯特朗的回答,这个解决方案对我有效:

<Style TargetType="{x:Type local:CustomTextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:CustomTextBox}">
                <mwt:ListBoxChrome x:Name="Bd" SnapsToDevicePixels="true" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" RenderFocused="{TemplateBinding IsKeyboardFocusWithin}" RenderMouseOver="{TemplateBinding IsMouseOver}">
                        <ScrollViewer x:Name="PART_ContentHost" />
                </mwt:ListBoxChrome>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsEnabled" Value="false">
                        <Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
                        <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>


我不认为你是愚蠢的-我在查找列表框边框的颜色时遇到了同样的问题(我认为是相同的颜色)。我不确定它是否在任何地方出现过。你能找到你想要的颜色的例子并得到它的RGB值吗?这可能有助于识别它是哪种颜色。最好选择文本框边框的颜色值,并将其用作边框。谢谢你的建议,但这似乎不起作用。我没有边框。您可能需要重新设置文本框(或自定义文本框)的模板以包含ListBoxChrome;当我使用该代码更改默认文本框上的控件模板时,它对我起到了作用。@Groky:您似乎缺少样式的BasedOn属性。我也有同样的问题。请参阅我的代码答案(它不适合这里)这不是正确的颜色。在XP上,我得到的是灰色,而不是正常的蓝色。