为什么这个代码在编译时会引发“在命名空间中不存在”错误?

时间:2016-01-30 02:30:56

标签: c# xaml windows-10 win-universal-app uwp

我正在为Windows 10开发一个基于XAML的应用程序。在尝试按照this answer在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设置为Symbol的那个。以下是该消息的屏幕截图:

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

有人可以向我推荐这个问题的解决方案吗?我尝试了重新启动Visual Studio并删除缓存二进制文件的建议here,但它似乎没有工作。

谢谢!

2 个答案:

答案 0 :(得分:3)

原来Uchendu是对的:我的一个问题是该课被标记为internal而不是public。我还必须将其标记为sealed,并将依赖项属性从字段更改为属性。例如,这个:

public static readonly DependencyProperty BlahProperty = /* ... */;

必须对此进行重构:

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

WinRT components don't allow exposing public fields

经过这些修改后,我能够成功构建库。

答案 1 :(得分:1)

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