2012-01-31 10 views
16

WPF XAML मेंडब्ल्यूपीएफ में डिजाइन-टाइम-केवल पृष्ठभूमि रंग?

<UserControl ... d:DesignHeight="500" d:DesignWidth="500" ... /> 

जो बहुत अच्छा है क्योंकि मैं एक प्रतिनिधि साथ लेआउट का निर्माण कर सकते के रूप में कोड में उदाहरण के लिए सुविधाजनक DesignHeight और DesignWidth है, लेकिन तालाबंदी करने वाले में, नियंत्रण आकार नहीं ।

हालांकि, मैं अक्सर अंधेरे यूआई बना रहा हूं, जहां लेबल और आगे सफेद होने की आवश्यकता है, लेकिन मेरे नियंत्रणों को अभी भी एक पारदर्शी पृष्ठभूमि रंग की आवश्यकता है। यह डिज़ाइन-टाइम असुविधा पैदा करता है क्योंकि डिजाइनर में पारदर्शी नियंत्रण के लिए सफेद डिफ़ॉल्ट पृष्ठभूमि रंग प्रतीत होता है, जिससे अपरिवर्तनीय सफेद-पर-सफेद लेबल होते हैं।

क्या डिज़ाइन-टाइम/रंगविड्थ जैसी सुविधा के साथ डिज़ाइन-टाइम पृष्ठभूमि रंग सेट करने का कोई तरीका या रणनीति है?

+0

मुझे यकीन नहीं कर रहा हूँ googling द्वारा मुझे दो दस्तावेज मिले [यहां] (http://msdn.microsoft.co एम/एन-यूएस/लाइब्रेरी/ई 839627 (वीएस .100) .aspx) और [यहां] (http://msdn.microsoft.com/en-us/library/ff602277 (v = vs.95) .aspx)। हो सकता है कि वे सहायक होंगे – Oybek

+2

यह भी देखें: http://stackoverflow.com/questions/5183801/black-background-for-xaml-editor – ColinE

+0

[XAML का संभावित डुप्लिकेट: केवल डिज़ाइन मोड में पृष्ठभूमि रंग कैसे बदलें?] (https://stackoverflow.com/questions/4843276/xaml-how-to-change-background-color-only-in-design-mode) –

उत्तर

8

मेरा उत्तर यहां मिला: Black Background for XAML Editor। रनटाइम पर System.ComponentModel.DesignerProperties.GetIsInDesignMode(this) की जांच सहित कई विकल्प हैं।

9

मैंने पाया कि आप अपने लिए एक कर सकते हैं। Custom design-time attributes in Silverlight and WPF designer एक ट्यूटोरियल है जो सिल्वरलाइट और डब्ल्यूपीएफ दोनों के लिए इसे कैसे करें।

+1

यह मेरे लिए थोड़ा अच्छा है, तो स्वीकार्य उत्तर, धन्यवाद। – Sevenate

+1

यह स्वीकार्य उत्तर होना चाहिए क्योंकि यह अधिक मॉड्यूलर है और इसे कई नियंत्रणों के लिए कोड लिखने के बिना सीधे डिजाइनर में उपयोग किया जा सकता है। – McLovin

8

d:DesignStyle प्रकार की एक अनियंत्रित संपत्ति d:DesignStyle है जिसे आप उपयोगकर्ता नियंत्रण पर सेट कर सकते हैं। यह शैली केवल डिजाइनर में लागू होती है और रनटाइम पर इसका उपयोग नहीं किया जाता है।

आप इस तरह इसका इस्तेमाल:

<UserControl ... d:DesignStyle="{StaticResource MyDesignStyle}" /> 

या इस तरह:

<UserControl ...> 
    <d:DesignerProperties.DesignStyle> 
     <Style TargetType="UserControl">...</Style> 
    </d:DesignerProperties.DesignStyle> 
</UserControl> 

नोट तथापि किसी भी मूल्य Style संपत्ति (कार्यावधि में प्रयोग किया जाता) पर सेट भी DesignStyle को पार कर जाएगी कि डिजाइनर में।

+0

यह अन्य उत्तरों की तुलना में वास्तव में अच्छा और आसान तरीका है। – gartenriese

+0

एक डिज़ाइन शैली क्या है और इसे कैसे प्रारंभ किया जाए? इसे आसान बनाने के लिए आप 'डी: DesignStyle' को व्हाइट पर कैसे सेट करते हैं? –

0

d:DesignerProperties.DesignStyle तकनीक इस पृष्ठ पर दिखाए एक एकल नियंत्रण करने के लिए एक WPF डिजाइन समय केवल शैली लागू करने के लिए अच्छा काम करता है, लेकिन यह एक ResourceDictionary में एक Style के लिए काम करने के लिए है कि करने के लिए लागू होता है प्रकट नहीं होता है उचित 0 टाइप किए गए नियंत्रण या शब्दकोश के दायरे के नीचे तत्वों के सभी। नीचे एक सरल समाधान है जिसे मैंने एक डिजाइनर-शैली शैली को ResourceDictionary में तैनात करने के लिए पाया।

उदाहरण के लिए Window पर एक TreeView युक्त विचार करें, जहां हम TreeViewItem नोड्स को पूरी तरह से विस्तारित करने के लिए दिखाना चाहते हैं-लेकिन केवल डिज़ाइन समय पर। सबसे पहले, वांछित शैली को XAML शब्दकोश में सामान्य तरीके से रखें।

<Window.Resources> 
    <Style TargetType="TreeViewItem"> 
     <Setter Property="IsExpanded" Value="True" /> 
    </Style> 
</Window.Resources> 

यहाँ, StyleWindow की ResourceDictionary में डाल दिया जाता है लेकिन निश्चित रूप से आप के बजाय किसी अन्य subsuming शब्दकोश इस्तेमाल कर सकते हैं। अगला, सी # कोड में, Resource­Dict­ionary से शैली को हटाएं जब डिज़ाइन मोड नहीं मिला।क्या इस OnInitialized ओवरराइड में है:

protected override void OnInitialized(EventArgs e) 
{ 
    if (DesignerProperties.GetIsInDesignMode(this) == false) 
     Resources.Remove(typeof(TreeViewItem)); 

    base.OnInitialized(e); 
} 

डिजाइन मोड:                                                         क्रम मोड:

design mode     runtime mode

0

यह DesignBackground के लिए पूर्ण समाधान है:

public class DesignTimeProperties : DependencyObject 
    { 
     private static readonly Type OwnerType = typeof(DesignTimeProperties); 

     #region DesignBackground (attached property) 

     public static Brush GetDesignBackground(DependencyObject obj) 
     { 
      return (Brush)obj.GetValue(DesignBackgroundProperty); 
     } 

     public static void SetDesignBackground(DependencyObject obj, Brush value) 
     { 
      obj.SetValue(DesignBackgroundProperty, value); 
     } 

     public static readonly DependencyProperty DesignBackgroundProperty = 
      DependencyProperty.RegisterAttached(
       "DesignBackground", 
       typeof (Brush), 
       OwnerType, 
       new FrameworkPropertyMetadata(Brushes.Transparent, 
        DesignBackgroundChangedCallback)); 

     public static void DesignBackgroundChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e) 
     { 
      if (IsInDesignMode) 
      { 
       var control = d as Control; 
       var brush = e.NewValue as Brush; 
       if (control != null && brush != null) 
       { 
        control.Background = brush; 
       } 
      } 
     } 

     public static bool IsInDesignMode 
     { 
      get 
      { 
       return 
        ((bool) 
         DesignerProperties.IsInDesignModeProperty.GetMetadata(typeof (DependencyObject)).DefaultValue); 
      } 
     } 

     #endregion 

    } 

उपयोग:

<UserControl ... infra:DesignTimeProperties.DesignBackground="Black" /> 
संबंधित मुद्दे