2009-06-05 19 views
6

मैं एक एम्बेडेड आवर्धक ग्लास आइकन के साथ एक टेक्स्ट टेक्स्टबॉक्स बनाने की कोशिश कर रहा हूं।डब्ल्यूपीएफ सिस्टम रंग: टेक्स्टबॉक्स सीमा का रंग

<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 में प्रवेश जो मुझे मानक पाठ बॉक्स सीमा के रूप में एक ही रंग दे देंगे नहीं मिल सकता है: मैं मार्कअप निम्नलिखित अब तक की है। यह डिफ़ॉल्ट रूप से एक नीली रंग है। क्या मैं वास्तव में बेवकूफ हूँ?!

संपादित करें: बीटीडब्ल्यू, छवि एक स्टैकेपनेल में निहित है क्योंकि मैं वहां भी एक ड्रॉपडाउन तीर डालने की योजना बना रहा हूं।

+0

मुझे नहीं लगता कि आप बेवकूफ हैं - मुझे एक सूची बॉक्स की सीमा (उसी रंग, मुझे लगता है) के रंग को खोजने का प्रयास करने में एक ही समस्या है। मुझे यकीन नहीं है कि यह कहीं भी सामने आया है। –

+0

क्या आप अपने इच्छित रंग का उदाहरण पा सकते हैं और इसके आरजीबी मूल्य प्राप्त कर सकते हैं? यह पहचानने में मदद कर सकता है कि यह कौन सा रंग है। – 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 बजाय कोड आप प्रस्तुत मिलान करने के लिए फिर से templating पाठ बॉक्स के बजाय सीमा का उपयोग करने के लिए सक्षम होना चाहिए।

+0

के रूप में उपयोग करें सुझाव के लिए धन्यवाद लेकिन यह काम नहीं कर रहा है। मुझे कोई सीमा नहीं है। – Grokys

+0

ListBoxChrome को शामिल करने के लिए आपको टेक्स्टबॉक्स (या अपना कस्टम टेक्स्टबॉक्स) फिर से टेम्पलेट करना पड़ सकता है; यह मेरे लिए काम कर रहा है जब मैंने उस कोड को डिफ़ॉल्ट टेक्स्टबॉक्स पर नियंत्रण टेम्पलेट बदलने के लिए उपयोग किया था। –

+0

@ ग्रॉकी: ऐसा लगता है कि आप स्टाइल पर आधारित ऑन-प्रॉपर्टी खो रहे हैं। एक ही समस्या थी। कोड के लिए मेरा जवाब देखें (यह यहां फिट नहीं है) – dwonisch

2

मैं के साथ प्रोग्राम के इसे पाने के लिए कर रहा था:

TextBox.BorderBrush = SystemColors.ControlDarkBrush; 
+0

यह एक इलाज, चीयर्स काम किया! – TabbyCool

+1

यह सही रंग नहीं है। मुझे XP पर उचित नीले रंग के बजाय भूरे रंग के आइश रंग मिलते हैं। –

1

यह hackish लगता है, लेकिन मैं एक पाठ बॉक्स (शायद ढह) बनाने और अपनी सीमा ब्रश से जुड़ कर सबसे अच्छा भाग्यशाली रहे हैं।

3

किसी को भी कि और ब्रश की एक सूची क्या उनके रंग की तलाश में है करने के लिए विभिन्न विषयों/ओएस के साथ की तरह दिखाई देगा

मैं यहाँ दिखेगा: http://blogs.msdn.com/b/wpf/archive/2010/11/30/systemcolors-reference.aspx

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> 
संबंधित मुद्दे