Подтвердить что ты не робот

Условная компиляция XAML

Есть ли простой способ использовать тот же условный символ компиляции, который я использую для моего кода С#, в моих файлах xaml?

4b9b3361

Ответ 1

Существует некоторая поддержка условная компиляция в XAML. Это не то же самое, что и в коде С#. Фокус в том, чтобы использовать AlternateContent с Requires против помеченного Незнакомый. Делая это, вы фактически можете иметь части вашего xaml недоступны на основе условий, а также включать или выключать.

Ответ 2

Я попробовал другое упомянутое решение, и оно компилируется и работает, хотя Visual Studio даст вам массу ошибок, и для меня решение, похоже, использует много времени на потоке пользовательского интерфейса, оба из которых я не знаю, t.

Лучшее решение, которое я использовал вместо этого, заключалось в том, что я поставил всю условную логику в код, стоящий за элементом управления. Поскольку вы не упоминаете о своем намерении, это может быть то, что вы искали.

Я хотел, чтобы условный символ компиляции влиял на цвета в моем приложении, но вы также можете представить, что одно и то же решение будет использоваться для других разных стилей или даже шаблонов или что это можно использовать с обычной логикой if-else вместо символы компиляции.

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                x:Class ="MyApp.Style.MainStyle">

<!--Version1 -->
<Color x:Key="AbMainColor">#068C00</Color>
<Color x:Key="AbLighterMainColor">#5EBD50</Color>
<Color x:Key="AbDarkerMainColor">DarkGreen</Color>

<Color x:Key="MainColor" />
<Color x:Key="LighterMainColor" />
<Color x:Key="DarkerMainColor" />

<!-- Version2 -->
<Color x:Key="OtherRedColor">#EF0000</Color>
<Color x:Key="LighterRedColor">#e62621</Color>
<Color x:Key="DarkerRedColor">#EF0000</Color>

<SolidColorBrush x:Key="MainBrush" Color="{DynamicResource MainColor}" />
<SolidColorBrush x:Key="LighterMainBrush" Color="{DynamicResource LighterMainColor}" />
<SolidColorBrush x:Key="DarkerMainBrush" Color="{DynamicResource DarkerMainColor}" />

Код для этого можно создать вручную, разместив в приложении приложение MainStyle.xaml.cs и используя его следующим образом:

using System.Windows;

namespace MyApp.Style
{
    partial class MainStyle : ResourceDictionary
    {
        public MainStyle()
        {
            InitializeComponent();
#if VERSION2
            this["MainColor"] = this["OtherRedColor"];
            this["LighterMainColor"] = this["LighterRedColor"];
            this["DarkerMainColor"] = this["DarkerRedColor"];
#elif VERSION1
            this["MainColor"] = this["AbMainColor"];
            this["LighterMainColor"] = this["AbLighterMainColor"];
            this["DarkerMainColor"] = this["AbDarkerMainColor"];
#endif
        }
    }
}

Важно отметить, что если ссылаться только на неустановленные значения из моего кода XAML и что это также работает для StaticResource s, хотя конструктор получает только один раз. Я думаю, что переписывание/использование большего количества методов ресурсных словарей также будет работать, но это уже решило мою проблему, поэтому я не пробовал.