2011-01-26 15 views
28

自分のUserControl "ClockControl"を作​​成しました。これは、メインウィンドウのXAMLから初期化します。xamlからどのようにパラメータを渡すのですか?

唯一の問題は、クロックコントロールのコンストラクタにパラメータを渡す必要があることです。私はそれをどのように行うことができるのかわかりません。

私はパラメータがない場合、これは動作します:

<myControl:ClockControl></myControl:ClockControl> 

をしかし、どのように私はこれをやってパラメータを渡すことができますか?事前に

public ClockControl(String city) 
    { 
     InitializeComponent(); 
     this.initController(); 
     ...... 
     ..... 
    } 

ありがとう:ここ

はコンストラクタです。

+0

質問に類似したhttp:// stackoverflow。com/questions/1083159/call-a-parameterized-constructor-xaml –

答えて

58

あなたのコンストラクタ:すべての

public ClockControl(String city) 
{ 
    InitializeComponent(); 
    this.initController(); 
    //... 
} 

まず、あなたがXAMLからClockControlを使用したい場合は、その後、あなたはデフォルトコンストラクタを必要とする、任意のパラメータをとらないコンストラクタを意味します。したがって、上記のコンストラクタは動作しません。

名前はCity、好ましくは依存関係プロパティを定義し、XAMLから使用することをお勧めします。

public class ClockControl: UserControl 
    { 
     public static readonly DependencyProperty CityProperty = DependencyProperty.Register 
      (
       "City", 
       typeof(string), 
       typeof(ClockControl), 
       new PropertyMetadata(string.Empty) 
      ); 

     public string City 
     { 
      get { return (string)GetValue(CityProperty); } 
      set { SetValue(CityProperty, value); } 
     } 

     public ClockControl() 
     { 
      InitializeComponent(); 
     } 
     //.......... 
} 

その後、あなたはXAMLでこれを書くことができます:このような何かCity以来

<myControl:ClockControl City="Hyderabad" /> 

は、あなたも、このようなBindingを行うことができますつまり、依存関係プロパティです:

<myControl:ClockControl City="{Binding Location}" /> 

希望、あなたの問題を解決!

+0

ありがとう!素晴らしい例。 – Ikky

+0

ようやく!誰かが私が望んでいたことを知っている...! –

+0

@Nawaz、Johnが望むものとJohnが必要とするものは、同じでも異なっていてもよい。 XAMLに 'x:Reference'属性があるので、[別の回避策](http://stackoverflow.com/a/40901014/2712726)を使う方が良いかもしれません。レビューしてもよろしいですか?適切なコンストラクタパラメータの受け渡しは、私が知る限りXAMLではまだ使用できません。 –

4

これはDependencyPropertyの使用で行われますが、コンストラクタ経由では行われません。コントロール自体にプロパティを追加し、コードビハインドからそれらを使用するだけです。

はしたDependencyPropertyのに関しては、以下の読み取りを持っている:視覚的な注意点としては

、これはあなたがすることができますどのようなものですそれに続いて、コードビハインドでそれを使用します。

<myControl:ClockControl City="New York"></myControl:ClockControl> 
+0

ありがとう、それを見てみましょう – Ikky

+1

コンストラクタでプロパティを使用していますか? 'ニューヨーク'の値が設定されると、 – Snowbear

+0

@Snowbear - それは私が言ったことでは全くありません。あなたの投票は下降気味でしたか? –

0

単純にコントロールのTagプロパティをバインドすることでこれを単純化できます。クイックと汚い、そしておそらくあまり優雅ではないが、別のプロパティを追加する時間を節約する。

関連する問題