XAML是否具有debugging模式的条件编译器指令?

我需要这样的样式在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> 

我最近不得不这样做,当我不容易find任何明确的例子时,我感到很惊讶。 我所做的是将以下内容添加到AssemblyInfo.cs中:

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

然后,使用标记兼容性名称空间的AlternateContent标记根据该名称空间定义的存在来select您的内容:

 <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被定义时,“debug-mode”也将被定义,并且“d”命名空间将会出现。 这使得AlternateContent标签select第一个代码块。 如果未定义DEBUG,则将使用代码的回退块。

这个示例代码没有经过testing,但是它与我在当前项目中使用的基本相同,只是有条件地显示了一些debuggingbutton。

我确实看到了一些依赖于“Ignorable”标签的示例代码的博客文章,但是这种方法看起来并不那么清晰易用。

你可以使用模板select器。 DataTemplateSelector类是你编码的东西。 用你重写的模板select方法,你可以把你的预处理器指令。

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

这在WPF / Silverlight / WP7中是不可能的。

有趣的是,标准文档ISO / IEC 29500涵盖了如何在XML文档中处理这个问题,而XAML确实支持这个规范mc:Ignorable一个项目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属性来支持devise时function。