Windows Universal App共享库代码在平台特定项目的XAML中无法正确引用

时间:2015-01-14 18:07:49

标签: c# xaml windows-8.1 blend win-universal-app

我遇到通用Windows应用程序的问题,并在设计视图和混合中查看UserControl。

我在共享库中有一个BaseUserControl和一些ValueConverters。我在App.xaml中引用了值转换器,而BaseUserControl是我希望使用Blend来帮助设计的特定UserControl的Base。

我目前在Visual Studio XAML设计器和Blend中遇到设计时错误:

  

命名空间中不存在名称“BaseUserControl”   “使用:MyProject.Controls”。

设计器视图和Blend显示一个包含消息的框:

  

无效标记 - 检查错误列表以获取更多信息

我可以构建项目并运行它,一切都显示出来并且工作正常。

如何在Designer / XAML View and Blend中识别共享库代码?

UserControl的定义如下:

<controls:BaseUserControl
        x:Class="MyProject.Controls.Menu.LeftNavigation"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:MyProject.Controls.Menu"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:controls="using:MyProject.Controls"
        mc:Ignorable="d"
        Background="#232323"
        d:DesignHeight="800"
        d:DesignWidth="110"
        >
...
</controls:BaseUserControl>

背后的代码很简单:

namespace MyProject.Controls.Menu
{
    public sealed partial class LeftNavigation : BaseUserControl
    {
        public LeftNavigation()
        {
            this.InitializeComponent();
        }
    }
}

1 个答案:

答案 0 :(得分:2)

我注意到您使用controls:BaseUserControl扩展为MyProject.Controls.BaseUserControl。但是,在 Code Behind 中,您已将命名空间设置为MyProject.Controls.Menu。这将阻止设计师找到您的控件。

将控制标记更改为:

xmlns:controls="using:MyProject.Controls.Menu"

或者,将后面的代码中的命名空间更改为MyProject.Controls,然后您可以单独保留xmlns:controls标记。

此外,我看到设计人员未能注意到在 Visual Studio 2013中开发的通用应用(现在称为 Windows应用)的共享库中的新控件即使名称空间正确。如果在将xaml标记添加到页面时共享库过时,则会发生这种情况。如果发生这种情况,请暂时删除您在xaml中暂时包含controls:BaseUserControl的任何尝试。

然后,清理解决方案并重建它。这将允许共享库正确重建,将新标记暴露给设计器。最后,在构建成功后重新添加标记并重新构建。

我希望能有所帮助。我今天只是在努力解决这个问题。