我试图在UWP中创建一个行为,想要一个依赖属性“Type TargetType”,如下面的代码所示。意图是使用Type,以便XAML编辑器可以识别它并自动完成/导入Style.TargetType类型的命名空间。
但是一旦我运行程序,我就崩溃了。
在xaml编辑器中使用StringToTypeConverter丢失了自动完成功能。
那我怎么能像Style一样呢?
依赖属性
public static readonly DependencyProperty TargetTypeProperty = DependencyProperty.Register(nameof(TargetType), typeof(Type), typeof(LazyIWorkVmBehavior), new PropertyMetadata(null));
public Type TargetType
{
get { return (Type) GetValue(TargetTypeProperty); }
set { SetValue(TargetTypeProperty, value);}
}
用法:
<mvvmLazyControl:LazyIWorkVmBehavior TargetType="viewModel:WorkVm2" />
错误消息: WinRT信息:无法从文本“viewModel:WorkVm2”创建“MvvmLazyControl.LazyIWorkVmBehavior”。 [线:42位置:46]
答案 0 :(得分:0)
由于我不知道你如何定义Type
对象viewModel:WorkVm2
,我只是通过代码成功地尝试了你的依赖属性,如下所示:
<local:LazyIWorkVmBehavior TargetType="local:Withinstyle" />
<local:LazyIWorkVmBehavior TargetType="Button" />
<local:LazyIWorkVmBehavior TargetType="local:Secondpage" />
Withinstyle
是我项目中的自定义控件,Secondpage
是我项目中的xaml
页面。它们都可以在我的项目中成功运行。我可以通过设置带有错误前缀或没有前缀的TargetType
对象来重现您的异常。因此,请确认您已为自定义类型viewModel
添加了xmlns前缀WorkVm2
,并确保WorkVm2
名称空间中存在viewModel
。
另一件事,根据Style.TargetType property文章:
指定TargetType值的典型方法是通过Style元素上的XAML属性。在XAML中设置时,TargetType的含义和您提供的值在XAML中表示类型的某些方面。
虽然这适用于Style
元素,但对于您的自定义LazyIWorkVmBehavior
,我认为自定义TargetType
也可以在XAML中表示。