Есть ли простой способ использовать тот же условный символ компиляции, который я использую для моего кода C#, в моих файлах xaml?Условная компиляция XAML
ответ
Существует некоторая поддержка conditional compilation in XAML. Однако это не то же самое, что в коде C#. Хитрость заключается в использовании AlternateContent
с Requires
против чего-то помеченного Ignorable. Делая это, вы фактически можете иметь части вашего xaml недоступны на основе условий, а также включать или выключать.
Я попробовал другое упомянутое решение, и оно компилируется и работает, хотя Visual Studio даст вам массу ошибок, и для меня решение, похоже, использует много времени на потоке пользовательского интерфейса, оба из которых я надел Мне нравится.
Лучшее решение, которое я использовал вместо этого, состояло в том, что я поставил всю условную логику в код, стоящий за элементом управления. Поскольку вы не упоминаете о своем намерении, это может быть то, что вы искали.
Я хотел бы, чтобы условный символ компиляции влиял на цвета в моем приложении, но вы также можете представить себе одно и то же решение, которое будет использоваться для других разных стилей или даже шаблонов, или что это можно использовать с обычной логикой 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, хотя конструктор получает только один раз. Я предполагаю, что переписывание/использование большего количества методов ресурсных словарей также будет работать, но это уже решило мою проблему, поэтому я не пытался.
- 1. «Условная компиляция» в XAML?
- 2. Условная компиляция
- 3. Условная компиляция в Scala
- 4. javascript error - условная компиляция
- 5. iOS - условная компиляция (xcode)
- 6. SCRIPT1030: Условная компиляция отключена
- 7. Условная компиляция отключена
- 8. Условная компиляция выключена
- 9. Условная компиляция в Xcode
- 10. Условная компиляция - альтернативы реализации
- 11. Условная компиляция в Go
- 12. Условная компиляция в Python
- 13. Условная компиляция в OCaml
- 14. Golang условная компиляция
- 15. xcode условная компиляция
- 16. GWT условная компиляция
- 17. Условная компиляция шаблонов
- 18. Условная компиляция Java
- 19. Sencha Touch условная компиляция
- 20. Delphi условная компиляция
- 21. VHDL - Условная компиляция
- 22. Условная компиляция в flex
- 23. ImageButton Условная компиляция отключена
- 24. Mathematica: условная «компиляция»
- 25. Условная компиляция #ifdef
- 26. MSBuild Условная компиляция
- 27. Условная логика Внутри XAML
- 28. #include in C# (условная компиляция)
- 29. VBA Тип рассогласование (условная компиляция)
- 30. C++ 11: условная компиляция: члены
Рид, можете ли вы разместить хотя бы какой-нибудь соответствующий код/информацию? Ответы не должны содержать * просто * ссылку. – NullUserException
Согласен. У меня возникли проблемы с пониманием того, как ссылка была полезна. –
Ссылка была разбита. –