2012-01-04 5 views
42

मैं XAML में शैलियों के लिए कुछ इस तरह की जरूरत है:क्या एक्सएएमएल में डीबग मोड के लिए एक सशर्त कंपाइलर निर्देश है?

<Application.Resources> 

#if DEBUG 

    <Style TargetType="{x:Type ToolTip}"> 
     <Setter Property="FontFamily" Value="Arial"/> 
     <Setter Property="FlowDirection" Value="LeftToRight"/> 
    </Style> 
#else 
    <Style TargetType="{x:Type ToolTip}"> 
     <Setter Property="FontFamily" Value="Tahoma"/> 
     <Setter Property="FlowDirection" Value="RightToLeft"/> 
    </Style> 
#endif 

</Application.Resources> 
+2

आप क्या करने की कोशिश कर रहे हैं? – tsells

+1

मुझे डीबग मोड में अलग-अलग शैलियों की आवश्यकता है, ताकि मैं डीबग मोड में हल्का निष्पादन कर सकूं। –

उत्तर

83

मुझे हाल ही में ऐसा करना पड़ा और मुझे आश्चर्य हुआ कि यह कितना आसान था जब मुझे आसानी से कोई स्पष्ट उदाहरण नहीं मिल सका।

#if DEBUG 
[assembly: XmlnsDefinition("debug-mode", "Namespace")] 
#endif 

फिर, उस नाम स्थान परिभाषा की उपस्थिति के आधार पर अपनी सामग्री का चयन करने के मार्कअप-संगतता नाम स्थान के AlternateContent टैग इस्तेमाल करें::

<Window x:Class="Namespace.Class" 
     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="debug-mode" 

     Width="400" Height="400"> 

     ... 

     <mc:AlternateContent> 
      <mc:Choice Requires="d"> 
       <Style TargetType="{x:Type ToolTip}"> 
        <Setter Property="FontFamily" Value="Arial"/> 
        <Setter Property="FlowDirection" Value="LeftToRight"/> 
       </Style> 
      </mc:Choice> 
      <mc:Fallback> 
       <Style TargetType="{x:Type ToolTip}"> 
        <Setter Property="FontFamily" Value="Tahoma"/> 
        <Setter Property="FlowDirection" Value="RightToLeft"/> 
       </Style> 
      </mc:Fallback> 
     </mc:AlternateContent> 

     ... 
</Window> 

अब क्या मैंने किया था AssemblyInfo.cs के लिए निम्न जोड़ने था , जब DEBUG परिभाषित किया गया है, "डीबग-मोड" भी परिभाषित किया जाएगा, और "डी" नामस्थान मौजूद होगा। इससे वैकल्पिक सामग्री टैग कोड का पहला ब्लॉक चुनता है। यदि DEBUG परिभाषित नहीं किया गया है, तो कोड का फ़ॉलबैक ब्लॉक उपयोग किया जाएगा।

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

मैंने कुछ उदाहरण कोड के साथ एक ब्लॉग पोस्ट देखा जो "अनजान" टैग पर निर्भर था, लेकिन यह इस विधि के रूप में बहुत कम स्पष्ट और उपयोग करने में आसान लग रहा था।

+0

यह वास्तव में अच्छा और आसान है। और रिलीज बिल्ड के बाम संसाधनों में वास्तव में इस सब के किसी भी कलाकृतियों में शामिल नहीं है। मैंने इस तरह के अतिरिक्त DEBUG जानकारी के साथ कुछ टूलटिप-स्टैकपैनल्स समृद्ध किए। – springy76

+4

वीएस त्रुटि फलक इसे पसंद नहीं करता है, हालांकि सब कुछ अपेक्षित काम कर रहा है: [link] (http://stackoverflow.com/questions/24459716/alternatecontent-tags-causing-issues-with-ide-but-not-compiler) – springy76

+0

बिल्कुल सही ... बहुत सरल – electricalbah

3

आप एक टेम्पलेट का भी उपयोग कर सकता है। DataTemplateSlector क्लास कुछ कोड है। टेम्पलेट चयन विधि के साथ जो आप ओवरराइड करते हैं, आप अपने प्रीप्रोसेसर निर्देश डाल सकते हैं।

http://msdn.microsoft.com/en-us/library/system.windows.controls.datatemplateselector.aspx

+0

यह रनटाइम पर संकलित समय पर नहीं किया जाता है। – rolls

2

इस WPF/Silverlight/WP7 में संभव नहीं है।

एक दिलचस्प ध्यान दें, मानकों दस्तावेज़, ISO/IEC 29500, पर शामिल किया गया है कि यह कैसे एक XML दस्तावेज में नियंत्रित किया जाना चाहिए, और XAML कि कल्पना mc:Ignorable जो हमें इस तरह काम करने के लिए अनुमति देता है से आइटम में से एक का समर्थन करता है:

गुणों पर टिप्पणी करने के लिए
<Page xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:c="Comments" 
     mc:Ignorable="c"> 
    <Button Content="Some Text" 
      c:Content="Some other text" /> 
</Page> 

। मुझे लगता है कि यह अच्छा होगा अगर XAML एक दिन शेष स्पेक का समर्थन करता है जो वैकल्पिक सामग्री को लोड करने की अनुमति देता है।

mc:Ignorable विशेषता डिजाइन समय कार्यक्षमता का समर्थन करने के लिए मिश्रण द्वारा उपयोग की जाती है।

+0

एमएस ऑफिस ओपन एक्सएमएल फ़ाइल प्रारूप spec XAML के साथ क्या करना है? –

+0

टैंक, लेकिन इस समस्या की खुराक मेरी स्थिति में फिट नहीं है। –

+0

निकोलस, एक्सएएमएल पार्सर टीम (एसएल 4, डब्ल्यूपी 7.1, डब्ल्यूपीएफ) ने कुछ खास करने के बजाए विशेषताओं को अनदेखा करने के लिए अपनी जरूरतों को हल करने के लिए उस स्पेस का उपयोग करना चुना। यही कारण है कि कुछ डिफ़ॉल्ट XAML पृष्ठों में 'mc' नामस्थान परिभाषित किया गया है। – JasonRShaver

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