UWP“类型”依赖属性

时间:2016-11-09 21:18:40

标签: c# xaml uwp

我试图在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]

项目:https://github.com/sharethl/UWPTargetTypeDependencyTest

1 个答案:

答案 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中表示。