8

虫眼鏡アイコンが埋め込まれた検索 TextBox を作成しようとしています。これまでのところ、次のマークアップがあります。

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

ただし、標準の TextBox 境界線と同じ色になる SystemColors のエントリが見つかりません。これは、デフォルトでは青みがかった色です。ここで私は本当に愚かですか?

編集:ところで、ドロップダウン矢印も配置する予定なので、画像はスタックパネルに含まれています。

4

5 に答える 5

5

Border の代わりに 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>

提示したコードに一致するように TextBox を再テンプレート化するのではなく、Border の代わりに ListBoxChrome だけを使用できるはずです。

于 2009-06-05T13:27:20.183 に答える
3

ブラシのリストと、さまざまなテーマ/OSでのブラシの色がどのようになるかを探している人には

私はここを見るでしょう:http://blogs.msdn.com/b/wpf/archive/2010/11/30/systemcolors-reference.aspx

于 2011-08-08T20:53:19.673 に答える
3

ニコラス・アームストロングの答えに基づいて、その解決策は私のために働いています:

<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>
于 2012-05-25T09:36:15.310 に答える
3

私はプログラムでそれを得ることができました:

TextBox.BorderBrush = SystemColors.ControlDarkBrush;
于 2010-01-14T23:52:59.087 に答える
1

ハックのように思えますが、テキスト ボックスを作成し (おそらく折りたたんで)、その境界線ブラシにバインドすることで、幸運を祈りました。

于 2011-03-17T17:52:28.403 に答える