首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XAML条件编译

XAML条件编译
EN

Stack Overflow用户
提问于 2009-07-31 16:34:22
回答 2查看 12.7K关注 0票数 32

有没有一种简单的方法可以在我的c#文件中使用与我的xaml代码相同的条件编译符号?

EN

回答 2

Stack Overflow用户

发布于 2009-07-31 16:38:12

有一些对conditional compilation in XAML的支持。不过,它与C#中的代码不同。诀窍是对标记为Ignorable的东西使用带有RequiresAlternateContent。通过这样做,您实际上可以根据条件使xaml的某些部分不可用,并打开或关闭。

票数 23
EN

Stack Overflow用户

发布于 2014-12-01 15:06:14

我尝试了另一个提到的解决方案,它编译和工作,即使Visual Studio会给你加载错误,对我来说,该解决方案似乎在UI线程上使用了大量时间,这两个我都不喜欢。

我实现的最好的解决方案是将所有的条件逻辑放在控件后面的代码中。因为你没有提到你的意图,这可能就是你要找的。

我想让一个条件编译符号影响我的应用程序中的颜色,但您也可以想象将相同的解决方案用于其他不同的样式甚至模板,或者这可以与通常的if-else逻辑一起使用,而不是编译符号。

代码语言:javascript
复制
<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并像这样使用它来手动创建代码隐藏:

代码语言:javascript
复制
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,尽管构造函数只被调用一次。我猜覆盖/使用更多的资源字典方法也是可行的,但这已经解决了我的问题,所以我没有尝试。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1213576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档