none
WPF CANVAS上に貼り付けたコントロールの位置の指定 RRS feed

  • 質問

  • canvas1.Children.Add(label1) として、Canvas上にLabelコントールを貼り付ける位置を指定したいと思っています。
    WEBサイトで調べたところ、次のようにすれば良いと分かったのですが、

            label1.SetValue(canvas1.LeftProperty, 720)
            label1.SetValue(canvas1.TopProperty, 40)

    ここで、720という数値の部分で例外が発生します。

    System.ArgumentException: ''720' は、プロパティ 'Left' の有効な値ではありません。'

    どうすれば例外が発生しなくなるのか教えて下さい。
    2018年10月20日 4:34

回答

  • SetValueの第二引数はobject型なので、どんな方でも受け入れてしまいます。
    ですが、CanvasのLeftPropertyはdouble型と決まっているので、int型を入れると自動変換はしてくれずにエラーになってます。

    Canvas.SetLeftを使うか、double型として渡すといいです。

    System.Windows.Controls.Canvas.SetLeft(label1, 720);//これは引数がdouble型なので自動変換してくれる
    
    double d = 720;
    label1.SetValue(System.Windows.Controls.Canvas.LeftProperty, 720.0);//.0をつけることで浮動小数と解釈してくれる
    label1.SetValue(System.Windows.Controls.Canvas.LeftProperty, (double)720);//double型にしてから入れる
    label1.SetValue(System.Windows.Controls.Canvas.LeftProperty, d);//double型の変数で入れる
    


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答としてマーク huahi11112 2018年10月20日 7:30
    2018年10月20日 5:54

すべての返信

  • SetValueの第二引数はobject型なので、どんな方でも受け入れてしまいます。
    ですが、CanvasのLeftPropertyはdouble型と決まっているので、int型を入れると自動変換はしてくれずにエラーになってます。

    Canvas.SetLeftを使うか、double型として渡すといいです。

    System.Windows.Controls.Canvas.SetLeft(label1, 720);//これは引数がdouble型なので自動変換してくれる
    
    double d = 720;
    label1.SetValue(System.Windows.Controls.Canvas.LeftProperty, 720.0);//.0をつけることで浮動小数と解釈してくれる
    label1.SetValue(System.Windows.Controls.Canvas.LeftProperty, (double)720);//double型にしてから入れる
    label1.SetValue(System.Windows.Controls.Canvas.LeftProperty, d);//double型の変数で入れる
    


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答としてマーク huahi11112 2018年10月20日 7:30
    2018年10月20日 5:54
  • 
    label1.SetValue(System.Windows.Controls.Canvas.LeftProperty, 720.0)
    ↑この方法で、小数点をつけたら動作しました。

    数値を入れているのになぜ認識しないのか、結構悩んだんです。
    今回も親切な御回答をありがとうございました。
    2018年10月20日 7:33