一尘不染

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

c#

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

阅读 342

收藏
2020-05-19

共1个答案

一尘不染

我最近不得不这样做,当我无法轻松找到任何清晰的示例时,它是如此的简单,这让我感到惊讶。我所做的是将以下内容添加到AssemblyInfo.cs中:

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

现在,当定义DEBUG时,还将定义“调试模式”,并且将出现“
d”命名空间。这使AlternateContent标记选择了第一段代码。如果未定义DEBUG,则将使用Fallback代码块。

此示例代码未经测试,但与我在当前项目中有条件地显示一些调试按钮所用的基本上相同。

我确实看到了一篇博客文章,其中包含一些示例代码,这些代码依赖于“ Ignorable”标签,但这种方法看起来不太清晰且易于使用。

2020-05-19