我想知道为什么我的Visual Studio 2017 Intellisense只显示带有公共getter的字段。在这个特殊情况下,带有公共getter的静态字段,因为我试图将一些静态/常量字段加载到WPF内容中。
正如您在下面的代码中看到的,我已向App
类添加了三个不同的字段,但只显示了一个(StaticGetterName
)。有趣的事实是,如果我在拼写中没有任何错误地键入它,那么其他两个字段(StaticField
& ConstantName
)正在顺利运行。该项目使用App
class。
我已经尝试过其他名称空间,其他类尝试将static
关键字添加到类声明中 - 到目前为止没有变化。此外,partial
关键字也不是问题。
如果我要写一些粘合剂,那就没问题了。只显示公共吸气剂的建议就足够了。但是当涉及到所有类型的静态字段时?不太多。
我已经看到了其他问题所以我推断出XAML Intellisense仍然存在一些漏洞,但要澄清一下 - 这不是Intellisense无法正常工作的情况。确实它有效,在我看来,它并没有显示所有可能的自动完成。
App.xaml.cs
namespace DSIK.ClientApp
{
using System.Windows;
public partial class App : Application
{
public const string ConstantName = "Client";
public static string StaticField = ConstantName;
public static string StaticGetterName => ConstantName;
}
}
MainWindow.xaml
<Window x:Class="DSIK.ClientApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:DSIK.ClientApp"
Title="{x:Static local:App.StaticGetterName}" Height="460" Width="570">
<Grid>
</Grid>
</Window>
答案 0 :(得分:1)
我很简短,因为Xaml类型的系统和模式模型只有属性的概念。没有领域的概念。可以使用默认模式上下文将CLR字段视为Xaml属性,但从未完成过。我想没有理由,因为在.NET中通常不鼓励使用公共的非最终字段。
Xaml类型模型也没有保护级别的概念。这可能是一个刻意的设计决定。可以在Xaml标记中声明的所有成员都必须是公共的。这是有意义的,因为Xaml(或Baml)在运行时被解析,并且Xaml可以完全存在于项目和程序集的领域之外,因此没有明确和一致的方式来处理internal
成员,因为例。并且来自Xaml的对象的构造不会在构造对象的实例的上下文中发生。换句话说,Xaml从外部构建对象,因此它不能支持private
或protected
成员。
最后,常量和字段有点不同。即使公共字段确实映射到Xaml属性,也没有理由映射常量,因为它们不可能在Xaml中设置。同样适用于只读字段,就像只读属性(或没有公共设置器的属性)一样。