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>
相关推荐
兰亭妙微UI设计公司13 小时前
兰亭妙微UI设计公司分享:EQUA 智能健康生态系统 UI/UX 设计深度解析
ui·交互
Cx330❀1 天前
Qt 常用控件属性与底层机制详解:从窗口半透明、浮点数陷阱到 QSS 与焦点策略
qt·ui·图形渲染
Cx330❀1 天前
Qt 常用 UI 控件详解:从QPushButton到QLabel 核心用法解析
qt·ui·图形渲染
传奇开心果编程1 天前
【ArkUI 练中学】第15课:UI 界面设计与实战
学习·ui·华为·harmonyos
HwJack201 天前
【HarmonyOS开发小实践】ArkUI 动画系统属性动画、显式动画与路径动画
ui·性能优化·harmonyos
传奇开心果编程2 天前
【Flutter入门练中学】第2课:布局系统
学习·flutter·ui
传奇开心果编程2 天前
【Jetpack Compose基础语法学与练】第8课 rememberSaveable,页面旋转/系统重建保留状态
android·学习·ui·kotlin·android jetpack
xy34532 天前
Axure 9.0 中继器核心结构
前端·ui·html·axure·原型·产品设计
传奇开心果编程2 天前
【Jetpack Compose基础语法学与练】第7课 if条件渲染 + 列表基础(LazyColumn)
学习·ui·kotlin·android jetpack
传奇开心果编程2 天前
【SwiftUI入门练中学】第1课 从零开始
学习·ui·ios·swiftui·swift