Есть ли простой способ использовать тот же условный символ компиляции, который я использую для моего кода С#, в моих файлах xaml?
Условная компиляция XAML
Ответ 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, хотя конструктор получает только один раз. Я думаю, что переписывание/использование большего количества методов ресурсных словарей также будет работать, но это уже решило мою проблему, поэтому я не пробовал.