有关VS2013,请参见下面的更新。
当使用类作为公开d:DesignInstance
的KeyedCollection<TKey, TItem>
时,XAML设计器会发出以下警告:
提供的泛型参数的数量并不等于泛型类型定义的正确性。 参数名称:实例化
这个问题可以用以下简单的程序再现:
<Window x:Class="Test.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:local="clr-namespace:Test"
mc:Ignorable="d"
d:DataContext="{d:DesignInstance local:MyClass}" />
namespace Test
{
public partial class MainWindow : Window
{
public MainWindow() { InitializeComponent(); }
}
public class MyClass
{
public KeyedCollection<string, object> SettingsModule { get; private set; }
}
}
我无法提供任何公开KeyedCollection
的类的设计时形状。
你知道这是怎么回事吗?
更新:在VS2013中,设计人员在处理KeyedCollection
时的行为已经发生了变化(尽管仍然没有完全工作)。
以上示例不再生成错误。但是,如果KeyedCollection
使用某些类型(例如接口)作为TItem
,则会生成以下错误:
对象引用未设置为对象的实例。
请考虑以下示例:
namespace Test
{
public partial class MainWindow : Window
{
public MainWindow() { InitializeComponent(); }
}
public class MyClass
{
public KeyedCollection<string, IInterface> MyCollection { get; private set; }
}
public interface IInterface
{
string Name { get; set; }
}
}
发布于 2014-02-10 23:55:28
通过将设计实例类型前缀为"d: type“,我已经能够解决这个问题:
d:DataContext="{d:DesignInstance d:Type=local:MyClass}"
这似乎是VS2013设计器中的一个bug。我认为d:Type属性应该是d:DesignInstance
属性的默认属性。而且,奇怪的是,我只在KeyedCollection
类中看到了这个问题。
此外,MSDN examples of d:DesignInstance
使用有时使用没有前缀的"Type“。在本例中,如果省略d:Type
或缺少前缀,就会像我前面提到的那样生成设计时错误。
发布于 2013-02-22 19:06:49
如果我没有误解你的问题
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Width="800" Height="800"
Title="MainWindow"
>
<Window.DataContext>
**<local:MyClass />**
</Window.DataContext>
<Grid x:Name="LayoutRoot">
</Grid>
我希望这能帮上忙。
发布于 2015-09-05 20:03:21
我必须从我的DesignInstance类中删除默认的构造函数
https://stackoverflow.com/questions/15030381
复制相似问题