none
ユーザーコントロール利用側で'ユーザーコントロール' のインスタンスを作成できませんでした。 RRS feed

  • 質問

  • あるユーザーコントロールを使って開発中です。
    ところが、デザイナ上で表題のエラーが出ます。

    調べた結果、ユーザーコントロール上に独自に作ったクラスをプロパティにしているとエラーが出るようです。

    推測なのですが、デザイナ側で独自クラスを理解?
    というか解釈出来ないためエラーが出ているような気がします。

    さらに調べると以下のようなページを見つけました。
    http://blogs.wankuma.com/trapemiya/archive/2009/03/02/169084.aspx


    推測が正しいと仮定した場合、このページの解説のように
    StaticResourceを使って定義しておけばデザイナ上で理解出来る→コンパイル可能になると考えています。

    そこで早速StaticResourceを使ってみたいのですが、スタイルなどの参照方法しか見つけられませんでした。
    今回のようなクラス定義をStaticResourceに組み込み参照するような方法を教えてください。

    そもそも推測が間違っているよ!!などご指摘いただければ幸いです。

    ユーザーコントロール

    using System;
    using System.Collections.Generic;
    using System.Windows;
    using System.Windows.Controls;
    
    
    namespace WpfApplication1
    {
        /// <summary>
        /// MyUserControl.xaml の相互作用ロジック
        /// </summary>
        public partial class MyUserControl : UserControl
        {
            public MyUserControl()
            {
                InitializeComponent();
            }
    
    
    
    
            public AnyClass Piyo
            {
                get { return (AnyClass)GetValue(PiyoProperty); }
                set { SetValue(PiyoProperty, value); }
            }
    
    
            public static readonly DependencyProperty PiyoProperty
              = DependencyProperty.Register("Piyo",
                  typeof(AnyClass),
                  typeof(MyUserControl),
                  new FrameworkPropertyMetadata(string.Empty, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, OnPiyoChanged));
    
            public static void OnPiyoChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
            {
                
            }
    
    
    
    
        }
    }

    ユーザーコントロールのプロパティに使う独自クラス

    namespace WpfApplication1
    {
    
        public class AnyClass
        {
    
        }
    }
    

    ユーザーコントロール利用側XAML

    ↓でコンパイルエラー

     <UC:MyUserControl>
                                            
     </UC:MyUserControl>

    2012年12月19日 2:23

回答

  • DependencyProperty.Register の第4引数

    new FrameworkPropertyMetadata(string.Empty, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, OnPiyoChanged))

    ここで FrameworkPropertyMetadata のインスタンスを生成してますが、最初のパラメータが string.Empty になってますよね。AnyClass と互換性がないため例外が発生してます。ここを null もしくは AnyClass のインスタンスに書き換えれば例外は発生しなくなります。

    new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, OnPiyoChanged)


    ひらぽん http://d.hatena.ne.jp/hilapon/

    • 回答としてマーク sumi_sumi 2012年12月19日 2:49
    2012年12月19日 2:40
    モデレータ

すべての返信

  • DependencyProperty.Register の第4引数

    new FrameworkPropertyMetadata(string.Empty, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, OnPiyoChanged))

    ここで FrameworkPropertyMetadata のインスタンスを生成してますが、最初のパラメータが string.Empty になってますよね。AnyClass と互換性がないため例外が発生してます。ここを null もしくは AnyClass のインスタンスに書き換えれば例外は発生しなくなります。

    new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, OnPiyoChanged)


    ひらぽん http://d.hatena.ne.jp/hilapon/

    • 回答としてマーク sumi_sumi 2012年12月19日 2:49
    2012年12月19日 2:40
    モデレータ
  • ひらぽんさま

    初歩的なミスでお恥ずかしい限りです。

    すいませんorz

    有難う御座いました!!

    2012年12月19日 2:50