1. ホーム
  2. c#

[解決済み] XAMLにデバッグモード用の条件付きコンパイラディレクティブはありますか?

2023-07-23 05:36:07

質問

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>

どのように解決するのですか?

私は最近これをしなければなりませんでしたが、明確な例を簡単に見つけることができなかったので、非常に簡単であることに驚きました。 私が行ったのは、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が定義されると、"debug-mode"も定義され、"d"の名前空間が存在することになります。 これにより、AlternateContentタグは、コードの最初のブロックを選択するようになります。 DEBUGが定義されていない場合、コードのFallbackブロックが使用されます。

このサンプル コードはテストされていませんが、基本的に、現在のプロジェクトでいくつかのデバッグ ボタンを条件付きで表示するために使用しているものと同じものです。

Ignorable" タグに依存するいくつかのサンプル コードを含むブログ投稿を見ましたが、この方法ほど明確で使いやすいものではなさそうでした。