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>
相关推荐
ZC跨境爬虫9 小时前
跟着 MDN 学 HTML day_2:(表单分组与高级输入控件实战)
前端·javascript·css·ui·html
吴声子夜歌9 小时前
Vue3——UI组件库Element Plus(一)
vue.js·ui·elementplus
软泡芙10 小时前
【WPF 】MVVM 设计模式在 WPF 中的实战应用
设计模式·wpf
for_ever_love__11 小时前
UI学习:单例传值
学习·ui·ios·objective-c
for_ever_love__11 小时前
UI学习:通知传值
学习·ui·ios·objective-c
ZC跨境爬虫11 小时前
跟着 MDN 学 HTML day_1:(全套原生Input+表单结构拆解)
前端·css·ui·html
慕容卡卡11 小时前
Claude 使用神器(web页面)--CloudCLI UI
java·开发语言·前端·人工智能·ui·spring cloud
qq_4523962311 小时前
第十四篇:《持续集成中的UI自动化:Jenkins/GitHub Actions集成》
ui·ci/cd·自动化
ZC跨境爬虫11 小时前
Apple官网复刻第二阶段day_6:(统一页脚模块封装+CSS公共复用体系落地)
前端·css·ui·重构·html
张小俊_12 小时前
WPF 跨线程 UI 更新与硬编码赋值引发的 Bug 排查
c#·bug·wpf