UWP“Type"依赖项属性

本文关键字:依赖 属性 quot Type UWP | 更新日期: 2023-09-27 18:17:22

我试图在UWP中创建一个行为,希望有一个依赖属性"Type TargetType",如下面的代码所示。目的是使用Type,以便XAML编辑器能够识别它,并自动完成/导入该类型的命名空间,比如Style。TargetType。

但是我一运行程序就崩溃了。

使用StringToTypeConverter会使xaml编辑器失去自动完成功能。

那么我怎样才能像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信息:Failed to create a 'MvvmLazyControl. "LazyIWorkVmBehavior'从文本'viewModel:WorkVm2'。[Line: 42 Position: 46]

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

UWP“Type"依赖项属性

由于我不知道您如何定义Type对象viewModel:WorkVm2,我只是通过代码成功地在我这边尝试了您的依赖属性,如下所示:

<local:LazyIWorkVmBehavior TargetType="local:Withinstyle" />
<local:LazyIWorkVmBehavior TargetType="Button" />
<local:LazyIWorkVmBehavior TargetType="local:Secondpage" />

Withinstyle是我项目中的自定义控件,Secondpage是我项目中的xaml页面。它们都可以在我的项目中成功运行。我可以通过设置带有错误前缀或没有前缀的TargetType对象来重现您的异常。因此,请确认您已经为自定义类型WorkVm2包含了一个xmlns前缀viewModel,并确保WorkVm2存在于viewModel名称空间中。

另一件事,根据风格。TargetType属性条目:

指定TargetType值的典型方法是通过Style元素上的XAML属性。在XAML中设置时,TargetType的含义和您提供的值在某些方面与XAML中如何表示类型有关。

虽然这是Style元素,但对于您的自定义LazyIWorkVmBehavior,在我看来,自定义TargetType也应该可以在XAML中表示。