WPF系统颜色: color of TextBox border

标签 wpf xaml styling

我正在尝试创建一个带有嵌入式放大镜图标的搜索文本框。到目前为止我有以下标记:

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

相关文章:

c# - 绑定(bind)导致 StackOverflow

c# - 为具有不同事件处理程序委托(delegate)的多个控件实现单个事件处理程序

c# - 绑定(bind)ContentPresenter的内容

wpf - 如何删除样式中定义的 WPF 动画?

c# - 如何将 ObservableCollections 绑定(bind)到 ItemsSource?

wpf - XamlReader - 将多个 CLR 命名空间映射到单个 XML 命名空间

c# - 用于鼠标中键单击的 XAML 调用命令 (System.Windows.Interactivity)

html - 如何使用 HTML 或 CSS 为 Google Fusion Tables 中的信息窗口设置样式?

javascript - 检测键是否应被视为样式或属性

text - 为文本添加样式的最有效数据结构