क्या WPF में एक DesignMode संपत्ति है?


जवाबों:


152

वास्तव में है :

System.ComponentModel.DesignerProperties.GetIsInDesignMode

उदाहरण:

using System.ComponentModel;
using System.Windows;
using System.Windows.Controls;

public class MyUserControl : UserControl
{
    public MyUserControl()
    {
        if (DesignerProperties.GetIsInDesignMode(this))
        {
            // Design-mode specific functionality
        }
    }
}

मैंने आपके समाधान को अपने आवेदन में लागू किया, लेकिन यह काम नहीं करता है। मैंने इसे यहाँ पूछा stackoverflow.com/questions/3987439/… । यदि आप चाहते हैं, तो कृपया हमसे जुड़ें और चर्चा करें।
नाम जी वीयू

@serhio यह इंगित करने के लिए धन्यवाद। क्या आप किसी वर्कअराउंड से अवगत हैं? Btw ऐसा लगता है कि यह सिल्वरलाइट में भी काम नहीं करता है: connect.microsoft.com/VisualStudio/feedback/details/371837/…
Enrico Campidoglio

VS2019 में स्विच Enable project codeसक्षम होना चाहिए (या मेनू-> डिज़ाइन->) रन प्रोजेक्ट कोड)।
मारबेल 82

47

कुछ मामलों में मुझे यह जानने की जरूरत है कि क्या मेरे गैर-यूआई वर्ग के लिए एक कॉल डिजाइनर द्वारा शुरू किया गया है (जैसे कि अगर मैं एक्सएएमएल से डेटाकोटेक्स्ट क्लास बनाता हूं)। फिर इस MSDN लेख से दृष्टिकोण सहायक है:

// Check for design mode. 
if ((bool)(DesignerProperties.IsInDesignModeProperty.GetMetadata(typeof(DependencyObject)).DefaultValue)) 
{
    //in Design mode
}

मैंने आपके समाधान को अपने आवेदन में लागू किया, लेकिन यह काम नहीं करता है। मैंने इसे यहाँ पूछा stackoverflow.com/questions/3987439/… । यदि आप चाहते हैं, तो कृपया हमसे जुड़ें और चर्चा करें।
नम जी वीयू

20

WinForms में होस्ट किए गए किसी भी WPF नियंत्रण के लिए , DesignerProperties.GetIsInDesignMode(this)काम नहीं करता है।

इसलिए, मैंने Microsoft Connect में बग बनाया और वर्कअराउंड जोड़ा:

public static bool IsInDesignMode()
{
    if ( System.Reflection.Assembly.GetExecutingAssembly().Location.Contains( "VisualStudio" ) )
    {
        return true;
    }
    return false;
}

GetEntryAssembly()इसके बजाय नहीं होना चाहिए GetExecutingAssembly()? उत्तरार्द्ध को विधानसभा में लौटना चाहिए जहां यह संपत्ति परिभाषित की गई है
fjch1997

7

देर से जवाब, मुझे पता है - लेकिन किसी और के लिए जो इस का उपयोग करना चाहता है DataTrigger, या सामान्य रूप से एक्सएएमएल में कहीं भी:

xmlns:componentModel="clr-namespace:System.ComponentModel;assembly=PresentationFramework"

<Style.Triggers>
    <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, 
                 Path=(componentModel:DesignerProperties.IsInDesignMode)}" 
                 Value="True">
        <Setter Property="Visibility" Value="Visible"/>
    </DataTrigger>
</Style.Triggers>

0

यह प्रयोग करें:

if (Windows.ApplicationModel.DesignMode.DesignModeEnabled)
{
    //design only code here
}

(Async और फ़ाइल संचालन यहाँ काम नहीं करेंगे)

इसके अलावा, XAML में एक डिज़ाइन-टाइम ऑब्जेक्ट को इंस्टेंट करने के लिए (विशेष डिजाइनर नाम स्थान है)

<Grid d:DataContext="{d:DesignInstance Type=local:MyViewModel, IsDesignTimeCreatable=True}">
...
</Grid>

वह वर्ग ( Windows.ApplicationModel) स्टोर एप्स के लिए है, जो विंडोज रनटाइम एपीआई में शामिल है। यदि आप सिर्फ नियमित रूप से विंडोज डेस्कटॉप एप्लिकेशन पर काम कर रहे हैं तो यह एक आउट-ऑफ-द-बॉक्स WPF समाधान नहीं है।
15
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.