Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XAML中的预处理器条件编译_C#_Wpf_Xaml - Fatal编程技术网

C# XAML中的预处理器条件编译

C# XAML中的预处理器条件编译,c#,wpf,xaml,C#,Wpf,Xaml,我有一些用C#WPF编写的代码,还有一些用于调试的代码,我目前编译这些代码是为了调试或发布模式。如何启用或禁用当前基于C#预处理器定义在XAML中编写的UI控件?您可以在构造函数中添加一些代码来启用/禁用元素: public MainWindow() { InitializeComponent(); #if DEBUG button1.IsEnabled = false; #endif } 有两种方法可以做到这一点。一种是使用预处理器指令,它可以屏蔽仅在特定构建中运行它的完整

我有一些用C#WPF编写的代码,还有一些用于调试的代码,我目前编译这些代码是为了调试或发布模式。如何启用或禁用当前基于C#预处理器定义在XAML中编写的UI控件?

您可以在构造函数中添加一些代码来启用/禁用元素:

public MainWindow()
{
    InitializeComponent();

#if DEBUG
    button1.IsEnabled = false;
#endif
}

有两种方法可以做到这一点。一种是使用预处理器指令,它可以屏蔽仅在特定构建中运行它的完整代码部分。或者,您可以使用条件属性轻松地排除完整的方法
以下是对两者之间差异的描述:。您可以通过在xaml中提供一个x:Name属性并将用于禁用控件的代码放在代码的条件部分来引用代码中的控件


更新:为了更清楚,提到了x:Name属性

XAML没有预处理器样式的指令。但是,您可以根据构建配置包括和排除XAML文件,从而为您提供一些控制。这可以为您提供一种根据所选构建配置包含文件变体的方法。当然,缺点是您必须维护一个文件的多个版本。这可以通过使用来缓解,以便根据所选配置自动生成不同的文件。

我真的在想,它们怎么可能不存在,但我想这样就可以了。不可能基于预处理器符号解析XAML。我相信这就是您要寻找的?您不能在预处理器符号上这样做,但Xaml确实支持使用标记兼容性功能有条件地编译部分。ptahmose的回答链接到一个问题,该问题链接到一篇关于这些问题的文章。这是你能得到的最接近的。是的,链接可能会给你你所需要的。这不是很有帮助——我需要根据预处理器指令更改组件的名称空间。。。无法在运行时更改xmlns属性!这些链接是关于C#条件编译的。它们不适用于Xaml。问题是关于Xaml的。请仔细阅读:“在Xaml中定义的控件”。。。“基于C#前置处理器定义”控件采用xaml格式。他想在C#中禁用预处理器,C#中没有预处理器,但有预处理器指令被处理得就像有预处理器一样。可能重复的是。看见