【问题标题】:UWP "Type" Dependency PropertyUWP“类型”依赖属性
【发布时间】:2017-03-23 19:23:17
【问题描述】:

我试图在 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 信息:无法从文本“viewModel:WorkVm2”创建“MvvmLazyControl.LazyIWorkVmBehavior”。 [行:42 位置:46]

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

【问题讨论】:

    标签: c# xaml uwp


    【解决方案1】:

    由于我不知道您是如何定义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 命名空间中。

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

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

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

    【讨论】:

    • 我在 TargetType 中尝试了 UserControl 和 Page,两者都在工作。但是对于像 public class WorkVm{} 这样的纯类,或者从 mvvmlight 派生的 ViewModelBase 的 Vm 会崩溃。命名空间是正确的。
    • 我已将所有纯类(仅 .cs 文件)移至与 Page.xaml 文件相同的级别。所以命名空间应该是个问题。
    • @Sunteen - MSFT 崩溃问题还没有解决。它与命名空间问题无关。正如我之前的评论所说,即使我将 WorkVm1 移动到顶级文件夹(命名空间),它仍然会崩溃。
    • @TonghuaLi。 WorkVm1 可以用 XAML 表示吗?正如我在回复中所说,根据style.TargetType 文章,自定义 TargetType 也应该可以在 XAML 中表示,因为您在 XAML 中使用它。
    • 您能否指出 XAML 中表示的含义是什么?这是我的 WorkVm1 类,“公共类 WorkVm1{}”。有趣的是“MyUserControl1.xaml”有效,而“DerivedUserControl.cs”无效。我这里上传了测试项目,请看一下。 github.com/sharethl/UWPTargetTypeDependencyTest
    猜你喜欢
    • 2018-09-20
    • 2018-05-21
    • 2017-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-02
    相关资源
    最近更新 更多