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]
答
因为我不知道你是怎么定义的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表示。
我试过UserControl和页面TargetType,都工作。 但是对于像public class WorkVm {}那样的纯类,或者从mvvmlight的ViewModelBase派生的Vm将会崩溃。命名空间是正确的。 –
我已将所有纯类(仅.cs文件)移至与Page.xaml文件相同的级别。所以命名空间应该是一个问题。 –
@TonghuaLi,您是否已经解决了命名空间问题? –