दिलचस्प पोस्ट
मैं UITableView चयन हाइलाइटिंग को अक्षम कैसे कर सकता हूं? एक अनप्लग्ड वर्चुअल सीरियल पोर्ट जारी करना क्या करता है -> पायथन फ़ंक्शन परिभाषाओं में क्या मतलब है? उत्तरदायी ऊंचाई के साथ एक डिवीजन के अंदर एक छवि खड़ी रूप से संरेखित करें चींटी के साथ एक बंडल जार बनाना क्या आप डेस्कटॉप विकास जावास्क्रिप्ट का उपयोग कर सकते हैं? जावास्क्रिप्ट में, क्यों "यह" ऑपरेटर असंगत है? PHP फ़ंक्शन कॉल करने के लिए jquery $ .ajax का उपयोग कर क्या पायथन स्ट्रिंग प्राकृतिक सॉर्ट के लिए फ़ंक्शन निर्मित है? जावास्क्रिप्ट में एक ऑब्जेक्ट की पहली संपत्ति कैसे पहुंचेगी? क्यों दोनों isset () और खाली चेक () एंड्रॉइड 4.3 ब्लूटूथ कम ऊर्जा अस्थिर तत्व में कोणीय एनजी-दोहराएँ सशर्त लपेट आइटम (एनजी-दोहरा में समूह आइटम) लिनक्स में धागे बनाम प्रक्रियाएं SASS: बेतरतीब ढंग से एक सूची से पृष्ठभूमि छवि उठाओ

क्या यह देखने का एक तरीका है कि क्या WPF वर्तमान में डिजाइन मोड में क्रियान्वित कर रहा है या नहीं?

क्या कोई कुछ वैश्विक राज्य चर का पता है जो उपलब्ध है, ताकि मैं जांच सकूं कि क्या कोड वर्तमान में डिजाइन मोड में चलाया जा रहा है (उदा। ब्लेंड या विज़ुअल स्टूडियो में) या नहीं?

यह ऐसा कुछ दिखाई देगा:

//pseudo code: if (Application.Current.ExecutingStatus == ExecutingStatus.DesignMode) { ... } 

मुझे इसके लिए कारण की आवश्यकता है: जब मेरा आवेदन अभिव्यक्ति ब्लेंड में डिज़ाइन मोड में दिखाया जा रहा है, तो मैं इसे "डिज़ाइन ग्राहक वर्ग" का उपयोग करने के लिए व्यू मॉोडेल को चाहता हूं, जिसमें डिज़ाइनर डिज़ाइन मोड में देख सकते हैं।

हालांकि, जब आवेदन वास्तव में कार्यान्वित हो रहा है, तो मैं वास्तव में ViewModel को वास्तविक ग्राहक वर्ग का उपयोग करना चाहता हूं जो वास्तविक डेटा देता है।

वर्तमान में मैं डिजाइनर बनाकर इस पर काम करने से पहले इसे हल करता हूं, व्यू मॉोडल में जाएं और "ApplicationDevelopmentMode.Executing" को "ApplicationDevelopmentMode.Designing" पर बदलें:

 public CustomersViewModel() { _currentApplicationDevelopmentMode = ApplicationDevelopmentMode.Designing; } public ObservableCollection<Customer> GetAll { get { try { if (_currentApplicationDevelopmentMode == ApplicationDevelopmentMode.Developing) { return Customer.GetAll; } else { return CustomerDesign.GetAll; } } catch (Exception ex) { throw new Exception(ex.Message); } } } 

वेब के समाधान से एकत्रित समाधान "क्या यह देखने का एक तरीका है कि क्या WPF वर्तमान में डिजाइन मोड में क्रियान्वित कर रहा है या नहीं?"

मेरा मानना ​​है कि आप GetIsInDesignMode की तलाश में हैं, जो एक निर्भरता ऑब्जेक्ट लेता है।

अर्थात।

 // 'this' is your UI element DesignerProperties.GetIsInDesignMode(this); 

संपादित करें: Silverlight / WP7 का उपयोग करते समय, आपको IsInDesignTool उपयोग करना चाहिए क्योंकि GetIsInDesignMode कभी-कभी झूठे झूठे दृश्य स्टूडियो में वापस कर सकते हैं:

 DesignerProperties.IsInDesignTool 

संपादित करें: और अंत में, पूर्णता के हित में, WinRT / Metro / Windows Store अनुप्रयोगों में समतुल्य है DesignModeEnabled :

 Windows.ApplicationModel.DesignMode.DesignModeEnabled 

आप ऐसा कुछ कर सकते हैं:

 DesignerProperties.GetIsInDesignMode(new DependencyObject()); 
 public static bool InDesignMode() { return !(Application.Current is App); } 

कहीं से भी काम करता है मैं डिज़ाबेड वीडियो को डिज़ाइनर में खेलने से रोकने के लिए इसका इस्तेमाल करता हूं।

जब विज़ुअल स्टुडियो ऑटो ने मेरे लिए यह कुछ कोड उत्पन्न किया

 if (!System.ComponentModel.DesignerProperties.GetIsInDesignMode(this)) { ... } 

और अगर आप बड़े पैमाने पर अपने बड़े WPF / Silverlight / WP8 / WinRT अनुप्रयोग के लिए Execute.InDesignMode मैक्र्रो का उपयोग करते हैं तो आप अपने दृश्य-मॉडल में आसान और सार्वभौमिक caliburn के Execute.InDesignMode का उपयोग कर सकते हैं। Execute.InDesignMode स्थिर संपत्ति (और यह दृश्य स्टूडियो के रूप में अच्छी तरह से ब्लेंड में काम करता है ):

 using Caliburn.Micro; // ... /// <summary> /// Default view-model's ctor without parameters. /// </summary> public SomeViewModel() { if(Execute.InDesignMode) { //Add fake data for design-time only here: //SomeStringItems = new List<string> //{ // "Item 1", // "Item 2", // "Item 3" //}; } } 

WPF में डिज़ाइन-टाइम डेटा निर्दिष्ट करने के अन्य (शायद नए) तरीके हैं, जैसा कि इस संबंधित उत्तर में बताया गया है ।

मूलतः, आप अपने व्यू मॉोडल के डिज़ाइन-टाइम इंस्टेंस का उपयोग करके डिजाइन-टाइम डेटा निर्दिष्ट कर सकते हैं:

 d:DataContext="{d:DesignInstance Type=v:MySampleData, IsDesignTimeCreatable=True}" 

या XAML फ़ाइल में नमूना डेटा निर्दिष्ट करके :

 d:DataContext="{d:DesignData Source=../DesignData/SamplePage.xaml}"> 

आपको SamplePage.xaml फ़ाइल गुणों को इस पर सेट करना होगा:

 BuildAction: DesignData Copy to Output Directory: Do not copy Custom Tool: [DELETE ANYTHING HERE SO THE FIELD IS EMPTY] 

मैं इन्हें मेरे UserControl टैग में जगह देता हूं, जैसे:

 <UserControl ... xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" ... d:DesignWidth="640" d:DesignHeight="480" d:DataContext="..."> 

रन-टाइम में, सभी "d:" डिज़ाईन-टाइम टैग गायब हो जाते हैं, इसलिए आप केवल अपना रन-टाइम डेटा संदर्भ प्राप्त करेंगे, हालांकि आप इसे सेट करना चुनते हैं।

संपादित करें आपको इन पंक्तियों की ज़रूरत हो सकती है (मुझे यह निश्चित नहीं है, लेकिन वे प्रासंगिक हैं):

 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" 

मैंने केवल विजुअल स्टूडियो 2013 और .NET 4.5 के साथ यह परीक्षण किया है लेकिन यह चाल है।

 public static bool IsDesignerContext() { var maybeExpressionUseLayoutRounding = Application.Current.Resources["ExpressionUseLayoutRounding"] as bool?; return maybeExpressionUseLayoutRounding ?? false; } 

यह संभव है कि विजुअला स्टूडियो में कुछ सेटिंग इस मान को गलत रूप में बदल देगी, अगर ऐसा कभी होता है तो हम यह जांच कर सकते हैं कि यह संसाधन नाम मौजूद है या नहीं। जब मैं डिजाइनर के बाहर अपना कोड चलाता था तो यह null था

इस दृष्टिकोण का उल्टा यह है कि इसे विशिष्ट App कक्षा के स्पष्ट ज्ञान की आवश्यकता नहीं है और यह आपके कोड के दौरान वैश्विक रूप से इस्तेमाल किया जा सकता है। विशेष रूप से डमी डेटा के साथ दृश्य मॉडल को पॉप्युलेट करने के लिए।

अगर आपके वर्ग को खाली कन्स्ट्रक्टर की आवश्यकता नहीं है तो मुझे आपके लिए एक विचार है

विचार एक खाली कन्स्ट्रक्टर बनाने के लिए है, फिर उसे अप्रचलित एट्रिब्यूट के साथ चिह्नित करें। डिजाइनर अप्रचलित विशेषता को अनदेखा करता है, लेकिन यदि आप इसका उपयोग करने का प्रयास करते हैं, तो कंपाइलर एक त्रुटि बढ़ाएगा, इसलिए इसे अपने आप का उपयोग करने का कोई खतरा नहीं है

( मेरी दृश्य मूल क्षमा करें )

 Public Class SomeClass <Obsolete("Constructor intended for design mode only", True)> Public Sub New() DesignMode = True If DesignMode Then Name = "Paula is Brillant" End If End Sub Public Property DesignMode As Boolean Public Property Name As String = "FileNotFound" End Class 

और xaml:

 <UserControl x:Class="TestDesignMode" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:vm="clr-namespace:AssemblyWithViewModels;assembly=AssemblyWithViewModels" mc:Ignorable="d" > <UserControl.Resources> <vm:SomeClass x:Key="myDataContext" /> </UserControl.Resources> <StackPanel> <TextBlock d:DataContext="{StaticResource myDataContext}" Text="{Binding DesignMode}" Margin="20"/> <TextBlock d:DataContext="{StaticResource myDataContext}" Text="{Binding Name}" Margin="20"/> </StackPanel> </UserControl> 

उपरोक्त कोड का परिणाम

यह काम नहीं करेगा अगर आपको वाकई कुछ और के लिए खाली कन्स्ट्रक्टर की आवश्यकता हो।