2012-01-04 56 views
42

我需要像這樣的風格在XAML: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 2012-01-04 18:57:00

+1

我需要在調試模式下有不同的風格,這樣我才能在調試模式下輕鬆執行。 – 2012-01-04 19:16:21

回答

83

我最近不得不這樣做,並驚訝於當我無法輕鬆找到任何明確的例子時,它有多簡單。我所做的是以下內容添加到AssemblyInfo.cs中:

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

然後,使用標記,兼容性命名空間的AlternateContent標籤基於該命名空間定義的presense選擇你的內容:

<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> 

現在,當DEBUG被定義時,「調試模式」也將被定義,並且「d」命名空間將會出現。這使得AlternateContent標籤選擇第一個代碼塊。如果未定義DEBUG,則將使用代碼的後備代碼塊。

此示例代碼未經過測試,但它基本上與我在當前項目中使用的相同,以有條件地顯示某些調試按鈕。

我的確看到了一些依賴於「Ignorable」標籤的示例代碼的博客文章,但是這種方法看起來並不那麼清晰易用。

+0

這真的很酷,很容易。而RELEASE構建的baml資源實際上並不包含任何所有這些的文物。我通過這種方式增加了一些帶有附加DEBUG信息的ToolTip-StackPanels。 – springy76 2014-07-29 15:51:21

+4

VS錯誤窗格不喜歡這個,雖然一切都按預期工作:[鏈接](http://stackoverflow.com/questions/24459716/alternatecontent-tags-causing-issues-with-ide-but-not-compiler ) – springy76 2014-07-30 11:15:50

+0

完美...非常簡單 – electricalbah 2014-08-13 04:37:37

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有一天支持允許加載替代內容的其餘規格,我認爲它會很酷。

Blend使用mc:Ignorable屬性來支持設計時功能。

+0

MS OFFice Open XML文件格式規範與XAML有什麼關係? – 2012-01-05 23:44:34

+0

坦克,但這個問題不符合我的情況。 – 2012-01-06 08:08:54

+0

Nicholas,XAML解析器團隊(SL4,WP7.1,WPF)選擇使用該規範來解決他們忽略屬性的需求,而不是僅僅製作一些東西。這就是爲什麼一些默認的XAML頁面定義了'mc'命名空間的原因。 – JasonRShaver 2012-01-06 22:33:44

相關問題