3

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; }
    }
}
4

3 に答える 3

11

デザインインスタンスタイプの前に「d:Type」を付けることで、この問題を解決することができました。

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

これはVS2013デザイナのバグのようです。d:Typeプロパティをd:DesignInstance属性のデフォルトプロパティにする必要があると思います。また、不思議なことに、私はKeyedCollectionクラスでこの問題を見ただけです。

さらに、MSDNの使用例ではd: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クラスからデフォルトコンストラクターを削除する必要がありました

于 2015-09-05T20:03:21.807 に答える