我有一个自定义用户控件,其中包含我希望能够在XAML中设置的公共属性。它在下面。
TestControl.xaml
<UserControl x:Class="Scale.Controls.TestControl"
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:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
TestControl.xaml.cs
using System.Windows.Controls;
namespace MyProject.Controls
{
public partial class TestControl : UserControl
{
public string TestMe { get; set; }
public TestControl()
{
InitializeComponent();
}
}
}
然后,在我的MainWindow.xaml文件中,我尝试包含这个:
<controls:TestControl TestMe="asdf" />
然而,即使Visual Studio自动填充了TestMe属性,我也会看到一些带有波浪线下划线的内容,上面写着&#34;会员&#34;测试我&#34;无法识别或无法访问,&#34;如下所示。
我可以发誓我之前在其他项目中做过类似的事情。如何通过XAML访问(即设置)公共属性?
答案 0 :(得分:18)
Visual Studio 2017
我有完全相同的问题。它正在编译一天......然后它就没有了。我没有使用DependencyProperty,这不应该如上所述。属性出现在Intellisense中,但在插入时给出相同的消息。我清理,建造,重建,重新启动VS,重新启动等等都无济于事。
最后的尝试...我删除了所有违规的属性并得到了一个干净的编译。然后我把它们放回去编译。我真的没想到。不知怎的,VS已经扭曲了。
答案 1 :(得分:6)
您需要将您的媒体资源声明为Dependency Properties
namespace MyProject.Controls
{
public partial class TestControl : UserControl
{
//Register Dependency Property
public static readonly DependencyProperty TestMeDependency = DependencyProperty.Register("MyProperty", typeof(string), typeof(TestControl));
public string MyCar
{
get
{
return (string)GetValue(TestMeDependency);
}
set
{
SetValue(TestMeDependency, value);
}
}
public TestControl()
{
InitializeComponent();
}
}
}
答案 2 :(得分:5)
将构建目标从AnyCPU更改为x86或x64。不确定为什么AnyCPU不起作用。
答案 3 :(得分:2)
如果使用的是VS2017,请尝试删除解决方案所有项目中的bin和obj文件夹,清理解决方案并重新生成。它对我有用!
答案 4 :(得分:1)
我知道这已经很晚了,但是我只是在VS 2020上遇到了这个问题。
我尝试了上面列出的所有3个选项,但包括CPU内部版本在内,它们均无效。
我最终不得不右键单击每个项目,清理并重建。然后它解决了这个问题...
真的很烦这还是一个问题。
答案 5 :(得分:0)
在我的情况下,最初没有错误,在修改我的课程后,我的课程中出现了一些错误,然后是Xaml错误member is not recognized
。在我的课程中解决错误之后,我通过构建项目,所有项目都构建没有错误,但错误仍显示在Error List Window
。最后,我重新启动Visual Studio,错误消失了。
答案 6 :(得分:-1)
而不是为控件设置多个依赖项属性,我会使用反射。
public static readonly DependencyProperty UserControlProperty = DependencyProperty.Register("UserControl",
typeof(object), typeof(CustomUserControl), new PropertyMetadata(null));
public object UserControl
{
get { return GetValue(UserControlProperty); }
set { SetValue(UserControlProperty, value); }
}