WPF xaml中的 xmlns:d=“http://schemas.microsoft.com/expression/blend/2008“ 的使用

在编辑界面代码时,我发现一行代码:

XML 复制代码
d:DataContext="{d:DesignInstance Type={x:Type localVM:EmbossingActionConfigPageViewModel},
                                 IsDesignTimeCreatable=False}"

关于其中的DataContext的指定逻辑让我很疑惑。

因为我在C#代码中也指定了DataContext,给我的感觉就是这里的d:DataContext=...并没有起作用,以下是学习到的知识点:

各部分含义:

  1. d: 命名空间

    • 这是设计时命名空间,通常定义为:

    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

    • 只在设计时生效,运行时会被忽略
  2. d:DataContext

    • 仅为设计器设置数据上下文

    • 不会影响运行时的实际DataContext

  3. d:DesignInstance

    • 一个特殊的标记扩展,创建设计时实例
  4. Type={x:Type localVM:EmbossingActionConfigPageViewModel}

    • 指定要使用的ViewModel类型

    • localVM是ViewModel的命名空间前缀

  5. IsDesignTimeCreatable=False

    • 重要参数!表示不真正创建ViewModel实例

    • 只使用类型元数据提供智能感知

实际作用

1. 提供智能感知

复制代码
<!-- 在设计器中,你可以这样绑定: -->
<TextBox Text="{Binding ViewModelProperty}" />
<!-- ↑ 输入时会有ViewModel属性的智能感知提示 -->

2. 设计时预览

复制代码
<!-- 如果 IsDesignTimeCreatable=True -->
d:DataContext="{d:DesignInstance Type=localVM:MyViewModel, 
               IsDesignTimeCreatable=True}"

会实际创建ViewModel实例,可以:

  • 预览真实数据

  • 看到控件样式

  • 测试布局

3. 与运行时DataContext的关系

复制代码
<!-- 典型用法 -->
<UserControl 
    x:Class="MyView"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    d:DataContext="{d:DesignInstance Type=localVM:MyViewModel, 
                     IsDesignTimeCreatable=False}"
    DataContext="{Binding MyViewModel, Source={StaticResource Locator}}">
    <!--
    设计时:使用d:DataContext获取智能感知
    运行时:使用实际的DataContext绑定
    -->
</UserControl>
相关推荐
天天进步201511 小时前
UI-TARS 源码解析 #10:parse_action 源码解析:如何用 AST 安全解析模型生成的函数调用?
安全·ui
心平气和量大福大15 小时前
C#-WPF-Window主窗体
开发语言·c#·wpf
FuckPatience20 小时前
Telerik UI for WPF 值不能为null。参数名:key
ui·wpf
breeze jiang21 小时前
从原生事件到 React 组件化:用状态驱动模型加载进度 UI
前端·react.js·ui
lindexi1 天前
WPF 笔迹延迟优化从硬件到软件的全链路分析
wpf
JaneConan2 天前
鸿蒙 ArkUI 深水区:@Watch 和 @Observed,状态变了「自动跑」+ 嵌套对象「深层重绘」
开发语言·后端·ui·harmonyos
weixin_727535622 天前
双Token认证体系深度拆解:Spring Security + JWT + Redis
redis·spring·wpf
施棠海2 天前
Pixel2XML实战:10分钟从设计稿做出一个能拨号的Android拨号盘页面(附完整业务代码)
android·java·ui
施棠海2 天前
设计稿一键变成可运行的Android页面:Pixel2XML全流程UI开发框架实战(附完整源码)
android·ui·架构
liuxiaowei32 天前
Winform+WPF双框架实战:喷涂工艺SCADA上位机从0到1搭建(附采集监控源码+车间踩坑实录)
大数据·hadoop·wpf