UWP“类型”依赖项属性

问题描述:

我试图在UWP中创建一个行为,想要有一个依赖属性“Type TargetType”,如下面的代码所示。意图是使用类型,以便XAML编辑器可以识别它并自动完成/导入类型的命名空间,如Style.TargetType。UWP“类型”依赖项属性

但是,一旦我运行该程序,我碰到了。

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

那么,我该怎么做这样的风格?

依赖属性

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的信息:无法创建从文本 'MvvmLazyControl.LazyIWorkVmBehavior' '视图模型:WorkVm2'。 [行:42职位:46]

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

因为我不知道你是怎么定义的Type对象viewModel:WorkVm2,我只是想你依赖属性成功地在我身边的代码如下:

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

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

另一件事,根据Style.TargetType property文章:

的典型方法来指定的TargetType值是通过样式元件上的XAML属性。在XAML中设置时,TargetType的含义和您提供的值将在XAML中表示类型的某些方面进行。

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

+0

我试过UserControl和页面TargetType,都工作。 但是对于像public class WorkVm {}那样的纯类,或者从mvvmlight的ViewModelBase派生的Vm将会崩溃。命名空间是正确的。 –

+0

我已将所有纯类(仅.cs文件)移至与Page.xaml文件相同的级别。所以命名空间应该是一个问题。

+0

@TonghuaLi,您是否已经解决了命名空间问题? –