2013-02-12 74 views
7

क्या कोई जानता है,WPF में क्लिक किए जाने पर कॉम्बोबॉक्स पृष्ठभूमि रंग कैसे बदलें (कॉम्बोबॉक्स खुला है)?

WPF में क्लिक किए जाने पर कॉम्बोबॉक्स पृष्ठभूमि रंग कैसे बदलें (कॉम्बोबॉक्स खुला है)?

+1

क्या आप हमें बता सकते हैं कि आप किस भाषा या ढांचे का उपयोग कर रहे हैं? – Dominic

+0

क्या प्रोग्रामिंग भाषा? – spajce

+0

हैलो, यह डब्ल्यूपीएफ है (।नेट) – Nimesh

उत्तर

2

यहाँ एक से थोड़ा अनुभवहीन दृष्टिकोण है:

<ComboBox 
    ItemsSource="{x:Static Fonts.SystemFontFamilies}" 
    Width="100" 
    > 
    <ComboBox.Style> 
    <Style TargetType="ComboBox"> 
     <Setter Property="Background" Value="Green" /> 
     <Style.Triggers> 
     <Trigger Property="IsDropDownOpen" Value="True"> 
      <Setter Property="Background" Value="Red" /> 
     </Trigger> 
     </Style.Triggers> 
    </Style> 
    </ComboBox.Style> 
</ComboBox> 

प्रारंभ में, इस Green को Background संपत्ति सेट, लेकिन जब ड्रॉप-डाउन दिखाई देता है यह Red पर जाने के लिए व्यवस्थित करता है। हालांकि, इस के साथ दो समस्याएं हैं:

  1. कुछ Windows विषयों में (जैसे, विस्टा और विंडोज 7 में इस्तेमाल एयरो विषय), हरे रंग की पृष्ठभूमि नीले रंग कि विषय इंगित करने के लिए उपयोग करता है के कारण अस्पष्ट हो जाता है कि लटकती की बटन दबाया गया है। तो बटन सायन के लिए लुप्त होने से पहले हरे रंग में जाना होगा।
  2. ComboBox.Background संपत्ति केवल बटन की उपस्थिति को प्रभावित करती है, न कि ड्रॉपडाउन सूची। यह संभव है कि आप वास्तव में जो करना चाहते हैं वह उस भाग के पृष्ठभूमि रंग को बदल देता है जो पॉप-अप होता है।

अगर 2 है आप चाहते हैं, यह काम कर देता है:

<ComboBox 
    ItemsSource="{x:Static Fonts.SystemFontFamilies}" 
    Width="100"  > 
    <ComboBox.Resources> 
    <Style TargetType="ComboBoxItem"> 
     <Setter Property="Background" Value="Orange" /> 
    </Style> 
    </ComboBox.Resources> 
</ComboBox> 

सच पूछिये तो, कि वास्तव में ComboBoxItem नियंत्रण कि लटकती में प्रदर्शित की पृष्ठभूमि का रंग बदल रहा है लेकिन यह है कि वांछित प्रभाव पड़ेगा ।

आप 1 ठीक करने के लिए, हालांकि, आप एक कस्टम टेम्पलेट्स, क्योंकि निर्मित ComboBox टेम्पलेट वास्तव में Background संपत्ति के लिए बहुत अच्छा समर्थन प्रदान नहीं करता है, क्योंकि यह बटन भाग के रंग बदल जाता है की आवश्यकता होगी चाहते हैं विभिन्न परिस्थितियों में। ComboBox के लिए एरो थीम की खोज वास्तव में एक कस्टम पृष्ठभूमि रंग का समर्थन करने के लिए डिज़ाइन नहीं की गई है, इसलिए आपको नियंत्रण के लिए अपना स्वयं का कस्टम रूप बनाना होगा।

0

ठीक है, के पीछे कोड के लिए अपने सवाल का जवाब देने:

((ComboBox)o).Background = GetBrushByRGB(r, g, b); 
foreach (ComboBoxItem item in ((ComboBox)o).Items) 
{ 
    item.Background = GetBrushByRGB(r, g, b); 
} 

तो मूल रूप से:

foreach (String tag in tags) 
{ 
    ComboBoxItem item = new ComboBoxItem(); 
    item.Content = tag; 
    cbTags.Items.Add(item); 
} 

तो फिर तुम आइटम पृष्ठभूमि रंग संशोधित कर सकते हैं:

अपने कॉम्बो बॉक्स के लिए आइटम जोड़ें आपको कॉम्बोबॉक्स इटिम के बैककलर को बदलने की जरूरत है।

0

सबसे पहले, आपको Combobox के लिए डिफ़ॉल्ट टेम्पलेट प्राप्त करने की आवश्यकता है (यदि आपको उनकी आवश्यकता है तो नीचे दिए गए विवरण)। फिर, पहले "ControlTemplate.Triggers" टैग के अंदर इस XAML डाल:

<DataTrigger Binding="{Binding IsDropDownOpen, RelativeSource={RelativeSource TemplatedParent}}" Value="True"> 
    <Setter Property="Background" TargetName="templateRoot" Value="Red"/> 
</DataTrigger> 

आपका बता गया बटन लाल हो जाएगा जब लटकती खुला है।

डिफ़ॉल्ट टेम्पलेट प्राप्त करने के लिए: विजुअल स्टूडियो 2015 में, डिज़ाइन मोड में अपना पृष्ठ देखें। फिर, combobox पर राइट-क्लिक करें, और "टेम्पलेट संपादित करें-> एक प्रतिलिपि संपादित करें" चुनें। यह आपके लिए डिफ़ॉल्ट टेम्पलेट जेनरेट करेगा।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^