我有下面的XAML在我的WPF应用程序的主窗口,我试图设置下面的设计时间d:DataContext
,我可以成功地为我所有的各种UserControls做,但它给了我这个错误,当我尝试在窗口上做它...Error 1 The property 'DataContext' must be in the default namespace or in the element namespace 'http://schemas.microsoft.com/winfx/2006/xaml/presentation'. Line 8 Position 9. C:\dev\bplus\PMT\src\UI\MainWindow.xaml 8 9 UI
<Window x:Class="BenchmarkPlus.PMT.UI.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:UI="clr-namespace:BenchmarkPlus.PMT.UI"
xmlns:Controls="clr-namespace:BenchmarkPlus.PMT.UI.Controls"
d:DataContext="{d:DesignInstance Type=UI:MainViewModel, IsDesignTimeCreatable=True}"
Title="MainWindow" Height="1000" Width="1600" Background="#FF7A7C82">
<Grid>
<!-- Content Here -->
</grid>
</Window>
5条答案
按热度按时间a9wyjsp71#
我需要将
mc:Ignorable="d"
属性添加到Window标记中。基本上我学到了一些新的东西。Expression Blend/Visual Studio设计器确认的d:
名称空间前缀实际上被真实的的编译器/xaml解析器 * 忽略/“注解掉”*!以下是取自
Nathan, Adam (2010-06-04). WPF 4 Unleashed (Kindle Locations 1799-1811). Sams. Kindle Edition.
标记兼容性
标记兼容性XML命名空间(http://schemas.openxmlformats.org/markup-compatibility/2006,通常与
mc
前缀一起使用)包含一个Ignorable属性,该属性指示XAML处理器忽略指定命名空间中的所有元素/属性,如果它们无法解析为其.NET类型/成员。(该命名空间还有一个ProcessContent属性,该属性为被忽略的命名空间内的特定类型重写Ignorable。)ExpressionBlend利用此功能来执行一些操作,例如向运行时可以忽略的XAML内容添加设计时属性。
可以为
mc:Ignorable
提供一个空格分隔的名称空间列表,为mc:ProcessContent提供一个空格分隔的元素列表。当XamlXmlReader遇到无法解析的可忽略内容时,它不会报告任何节点。如果可忽略的内容可以解决,则将正常报告。所以消费者不需要做任何特殊的事情来正确处理标记兼容性。czfnxgou2#
哇,真痛苦!让我们希望MS为x:Bind提供一些VS设计时支持。
我们希望能够使用VS设计器,但也能够轻松切换到x:Bind而不是Binding。我是这么做的
<Page ... >
中:这样,由于
{x:Bind}
,Page的实际数据上下文被设置为Page本身。这是因为x:Bind
是相对于Page的,并且没有给出路径。同时,由于
d:DataContext
行,VS设计器为了VS设计器交互的目的而反射MyView类(不创建示例)。这允许VS从MyView进行设计,然后您可以向下滚动到ViewModel属性,展开它并选择要绑定到的项。当你做了所有这些,VS设计器将创建一个绑定语句,其路径是相对于视图的,即。它恰好与x:Bind期望的路径完全相同。因此,如果您稍后想切换到x:Bind,您可以搜索并将所有“
{Binding
”替换为“{x:Bind
”。为什么我们甚至需要
d:DataContext
行来告诉VS要查看哪个类?问得好,因为您可能认为VS可以计算出下一行使用DataContext={x:Bind}
将DataContext设置为Page。继续尝试,它不起作用,如果你改变x:Bind到相对于self的Binding,它也不起作用。希望这种情况会得到清理的MS!!
vnzz0bqm3#
如果您对数据不太挑剔,请查看xmlns中的示例数据:d=”http://schemas.microsoft.com/expression/blend/2008“
你这样用它。。
然后,它用几行数据呈现项控件
hpcdzsge4#
我已经解决了在组件定义(UserControl或Window)中添加
d:DataContext="{d:SampleData}"
的问题。xoefb8l85#
对于我来说,我忘记在DataContext之前添加'd:'。
应该是这样的:
不包括:
(NOTE:这取决于您使用它的上下文。在大多数情况下,您不需要原始DataContext)