gpt4 book ai didi

c# - WPF AlternateContent 不工作

转载 作者:太空狗 更新时间:2023-10-30 00:18:28 27 4
gpt4 key购买 nike

出于测试目的,我试图在调试和发布配置中的 WPF 控件中显示不同的 View 元素。我使用这篇文章作为指南: Does XAML have a conditional compiler directive for debug mode? (SO)

为了对其进行测试,我创建了一个 VS2013 解决方案,其中包含一个名为 TestingAlternateContent 的 WPF 应用程序项目。在我的 AssemblyInfo.cs 中,我添加了以下代码:

#if DEBUG
[assembly: XmlnsDefinition("debug-mode", "TestingAlternateContent")]
#endif

在我的 MainWindow.xaml 中,我创建了一个简单的代码示例来测试此行为,如下所示:

<Window x:Class="TestingAlternateContent.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:debug="debug-mode"
mc:Ignorable="mc debug"

Title="MainWindow" Height="350" Width="525">
<Grid>
<mc:AlternateContent>
<mc:Choice Requires="debug">
<TextBlock Text="Debug mode!!" />
</mc:Choice>
<mc:Fallback>
<TextBlock Text="Release mode here!" />
</mc:Fallback>
</mc:AlternateContent>
</Grid>
</Window>

在测试时,我总是看到带有“ Release模式”的窗口!消息,无论我使用的是哪种配置(调试、发布)。我检查了 AssemblyInfo #if DEBUG 是否正常工作,当我在调试/发布配置之间更改时相应地更改。我已经使用 .NET Framework 3.5/4.5 版本在 VS2008/VS2013 下测试了相同的代码,但没有一个有效。我错过了什么?任何人都知道这里出了什么问题或者可以发布工作代码作为引用?

最佳答案

问题是 XmlnsDefinitionAttribute 是在解析 XAML 之后再解析的,所以它对同一个程序集不起作用。

但是,您可以在解决方案的任何其他(引用)项目中创建该 XmlnsDefinition,它会起作用

即:

  • ProjectA(命名空间:TestingAlternateContent)
    • 包含您的 MainWindow.Xaml
    • 引用项目B
  • 项目B

    • 包含 XmlsDefinitionAttributeTestingAlternateContent 的命名空间:

      #if DEBUG
      [assembly: XmlnsDefinition("debug-mode", "TestingAlternateContent")]
      #endif

我刚刚对其进行了测试,它工作正常,没有对程序集属性声明或 Xaml 进行任何修改,只是将其添加到不同的项目中

关于c# - WPF AlternateContent 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36150073/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com