3

请参阅下面的 VS2013 更新。

将类用作d:DesignInstance公开 a 的 aKeyedCollection<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 开始,设计人员处理 a 的行为发生了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; }
    }
}
4

3 回答 3

11

我已经能够通过在设计实例类型前加上“d:Type”来解决这个问题,如下所示:

d:DataContext="{d:DesignInstance d:Type=local:MyClass}"

这似乎是 VS2013 设计器中的一个错误。我相信 d:Type 属性应该是属性的默认d:DesignInstance属性。另外,奇怪的是,我只在KeyedCollection课堂上看到过这个问题。

此外,MSDNd:DesignInstance用法示例有时使用不带前缀的“类型”。在此示例中,如果d:Type省略或缺少前缀,则会生成设计时错误,正如我所提到的。

于 2014-02-10T23:55:28.260 回答
0

如果我没有误解您的问题,请尝试

<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>

我希望这将有所帮助。

于 2013-02-22T19:06:49.323 回答
0

我必须从我的 DesignInstance-Class 中删除默认构造函数

于 2015-09-05T20:03:21.807 回答