C# 为什么此代码在编译良好时会引发“命名空间中不存在”错误?

C# 为什么此代码在编译良好时会引发“命名空间中不存在”错误?,c#,xaml,windows-10,win-universal-app,uwp,C#,Xaml,Windows 10,Win Universal App,Uwp,我正在为Windows10开发一个基于XAML的应用程序。我在尝试在Setters中实现绑定时遇到了问题,如。这是我的密码: namespace Sirloin.Helpers { internal class Binding { public static readonly DependencyProperty ContentProperty = // ... public static string GetContent(Dependency

我正在为Windows10开发一个基于XAML的应用程序。我在尝试在Setters中实现绑定时遇到了问题,如。这是我的密码:

namespace Sirloin.Helpers
{
    internal class Binding
    {
        public static readonly DependencyProperty ContentProperty = // ...

        public static string GetContent(DependencyObject o) => // ...
        public static void SetContent(DependencyObject o, string value) => // ...
    }
}
这是我的XAML:

<Page
    x:Class="Sirloin.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Sirloin"
    xmlns:h="using:Sirloin.Helpers"> <!--Some designer stuff omitted for clarity-->

    <Page.Resources>
        <ResourceDictionary>
            <Style x:Key="MenuButtonStyle" TargetType="Button">
                <Setter Property="Background" Value="Transparent"/>
                <Setter Property="h:Binding.Content" Value="Symbol"/> <!--The XAML parser chokes on this line-->
                <Setter Property="FontFamily" Value="Segoe MDL2 Assets"/>
            </Style>
        </ResourceDictionary>
    </Page.Resources>
</Page>
出于某种原因,VS设计器在到达具有特殊绑定语法的行时似乎抛出了一个错误;也就是说,将h:Binding.Content设置为符号的那个。以下是消息的屏幕截图:

但奇怪的是,代码似乎编译得很好。当我在VisualStudio中按Ctrl+B时,它生成时没有错误,并成功输出二进制文件。当然,这样做的缺点是我不能使用设计器,它在每次构建项目时都声称XAML是“无效标记”

有人能给我推荐一个解决这个问题的方法吗?我尝试过重新启动VisualStudio并删除缓存的二进制文件的建议,但它似乎不起作用


谢谢

结果证明Uchendu是正确的:我的问题之一是该类被标记为内部类而不是公共类。我还必须将其标记为密封,并将依赖项属性从字段更改为属性。例如,这:

public static readonly DependencyProperty BlahProperty = /* ... */;
必须进行重构,以实现以下目标:

public static DependencyProperty BlahProperty { get; } = /* ... */;
自从


在这些修改之后,我能够成功地构建库。

在开始编译之前清除Visual Studio编辑面板,您将不会看到这些烦人的错误消息。也就是说,X关闭所有当前编辑会话,当然,对以下项消息的所有保存更改都回答“是”。

@Ryios尽管XAML引用的代码在同一个项目中,我怀疑你的代码会编译,因为设计器无法确定Sirloin.Helpers命名空间中的绑定对象,因此它没有在该对象的代码隐藏中生成代码。因此没有生成冲突的代码,因此生成的代码将生成。为什么您的绑定类标记为internal?你试过公开吗?我完全错过了你的装订课,对不起,我瞎了。是的,可能是因为它是乌琴杜建议的内部结构。WPF编辑器正在Visual Studio进程中运行,因此它无法看到您的绑定类,因为它是程序集的内部类。如果您确定WPF编辑器在哪个.Net程序集中编译,则可以使用InternalsVisibleToAttribute向Visual Studio公开您的内部对象。