2009-06-05 43 views
6

虫めがねのアイコンが埋め込まれたTextBoxを検索しようとしています。私は、これまでに次のマークアップを持っている:WPF SystemColors: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のエントリを見つけることができません。これはデフォルトでは青色です。私は本当にここで愚かなのですか?

EDIT:btw、画像はスタックパネルに含まれています。私はそこにドロップダウン・アローを入れるつもりだからです。

+0

私はあなたが愚かではないとは思わない - 私はリストボックスの境界線の色(同じ色、私は思う)を見つけることを試みて同じ問題があった。私はそれがどこに浮かんでいるか分からない。 –

+0

希望の色の例を見つけて、そのRGB値を取得できますか?これは、どの色であるかを識別するのに役立ちます。 – ChrisF

+0

より良い、テキストボックスの境界線の色の値を選択し、境界線として使用 –

答えて

4

ボーダーの代わりにMicrosoft.Windows.Themes.ListBoxChromeを試してみることもできます。それは、テキストボックスのデフォルトのテンプレートが使用するものです:

<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の代わりに、国境はなく、あなたが提示したコードに合わせて、再テンプレートのTextBoxを使用することができるはずです。

+0

提案ありがとうが、それは動作していないようです。私は国境を得ない。 – Grokys

+0

ListBoxChromeを含めるには、TextBox(またはカスタムTextBox)を再テンプレートする必要があります。このコードを使用してデフォルトのTextBoxでコントロールテンプレートを変更すると、私のために働いています。 –

+0

@Groky:StyleのBasedOn-Propertyが欠けているようです。 同じ問題がありました。コードのための私の答えを参照してください(それはここに収まらない) – dwonisch

2

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

TextBox.BorderBrush = SystemColors.ControlDarkBrush; 
+0

これは治療、歓声を働いた! – TabbyCool

+1

これは正しい色ではありません。私はXP上の適切な青の代わりに灰色の色を取得します。 –

1

それはハックようだが、私は、テキストボックスを作成(おそらく崩壊)とその境界ブラシに結合することによって、最高の幸運を持っていました。ブラシのリストとどのような彼らの色を探している人には

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> 
関連する問題