2010-03-12 13 views
13

मेरे पास कुछ कार्यक्षमता का परीक्षण करने के लिए कुछ उपयोगी wpf बटन हैं। यह अच्छा होगा कि उन्हें रिलीज में न दिखाएं लेकिन वास्तव में डीबग में।डीबग मोड में WPF शो नियंत्रण केवल

कोड से इसे करना आसान है। लेकिन मैं एक घोषणात्मक समाधान पसंद करूंगा।

उत्तर

22

एकमात्र समाधान मैं जानता हूँ कि इस तरह कहीं एक स्थिर संपत्ति बनाने के लिए है

<MyControl Visibility="{x:Static local:MyType.IsDebug}" /> 

XAML संकलक के लिए कुछ भी नहीं है झंडे।

+0

मैंने कनवर्टर का उपयोग किया, लेकिन यह तरीका अधिक कुशल – pjdupreez

+0

है यदि सिस्टम को बाध्यकारी है। डायग्नोस्टिक्स.डिबगर। आईएसएटैचड जो आप खोज रहे हैं उसके लिए पर्याप्त है, नीचे 2 उत्तरों देखें – DanW

2

जहां तक ​​मुझे पता है कि एक्सएएमएल से कॉन्फ़िगरेशन स्थिरांक (डीबग, रिलीज) का उपयोग करने का कोई तरीका नहीं है।
तो सबसे अच्छा आप प्राप्त कर सकते हैं बटनों की दृश्यता संपत्ति को अपने डेटाकॉन्टेक्स्ट पर डीबग संपत्ति में बांधना है। लेकिन उस संपत्ति को स्थापित करने के लिए अभी भी कुछ कोड की आवश्यकता होगी। तब

public static Visibility IsDebug 
    { 
#if DEBUG 
     get { return Visibility.Visible; } 
#else 
     get { return Visibility.Collapsed; } 
#endif 
    } 

इस तरह XAML में इसका इस्तेमाल करते हैं:

+0

हो सकता है कि एक कस्टम तत्व या विशेषता? मैं डब्ल्यूपीएफ के लिए काफी नया हूं इसलिए इस "विचार" को गंभीरता से न लें। – naeron84

0

सुनिश्चित नहीं हैं कि अंतर यह और स्टीवन के दृष्टिकोण के बीच है, लेकिन मैं एक गैर स्थैतिक कक्षा में एक गैर स्थिर संपत्ति के रूप में उसकी संपत्ति का इस्तेमाल किया, और इस तरह है जैसे कि यह संदर्भित:

<local:MyClass x:Key="MyClass" /> 
<MyControl Visibility="{Binding IsDebug, Source={StaticResource MyClass}, Mode=OneTime}" /> 
5

यह दिखा देंगे जब डीबगर संलग्न होता है। सबसे पहले, नाम स्थान सेट:

<BooleanToVisibilityConverter x:Key="BoolToVisibilityConverter"/> 

तो का उपयोग बाध्यकारी:

<MenuItem Header="onlyIfDebuggerAttached" Visibility="{Binding Source={x:Static diag:Debugger.IsAttached}, Converter={StaticResource BoolToVisibilityConverter}}" /> 
1

स्टीवन जवाब के आधार पर ... आप एक स्थिर उपयोग कर सकते हैं

xmlns:diag="clr-namespace:System.Diagnostics;assembly=mscorlib" 

तो अपने संसाधन सेट कक्षा और केवल एक बार दृश्यता घोषित करें।

using System.Windows; 

namespace HQ.Wpf.Util 
{ 
    /* Usage: 

     xmlns:wpfUtil="clr-namespace:HQ.Wpf.Util;assembly=WpfUtil" 

     <Button Name="CmdTest" Click="CmdTestOnClick" Visibility="{x:Static wpfUtil:DebugVisibility.DebugOnly}">Test</Button> 

    */ 

    public static class DebugVisibility 
    { 
     public static Visibility DebugOnly 
     { 
#if DEBUG 
      get { return Visibility.Visible; } 
#else 
      get { return Visibility.Collapsed; } 
#endif 
     } 

     public static Visibility ReleaseOnly 
     { 
#if DEBUG 
      get { return Visibility.Collapsed; } 
#else 
      get { return Visibility.Visible; } 
#endif 
     } 
    } 
} 

XAML:

<Button Name="CmdTest" Click="CmdTestOnClick" 
    Visibility="{x:Static wpfUtil:DebugVisibility.DebugOnly}">Test 
</Button> 
संबंधित मुद्दे