none
Anchorに代わるもの。 RRS feed

  • 質問

  • いつもお世話になります。
    VisualC#2010、WindowsXPでの動作について質問があります。
    WPFでボタンをウィンドウの右下に配置し、ウィンドウをリサイズしたときに、右と下から位置を変更せずに、ウィンドウに追従したいと考えています。
    Formのときは、Anchorを設定しますが、WPFではなにになるのでしょう?
    2011年4月28日 11:07

回答

  • Button の位置を Canvas.Left と Canvas.Top で指定しているところを、それぞれ Canvas.Right と Canvas.Bottom で指定すればよいと思います。
    Visual Studio のプロパティ ウィンドウでは設定できなさそうですので、XAML を直接編集してみてください。
    • 回答としてマーク d-kot 2011年4月28日 15:06
    2011年4月28日 12:18

すべての返信

  • こんんちは。

    ButtonのHorizontalAlignmentとVerticalAlignmentプロパティですね。

    HorizontalAlignment="Right" VerticalAlignment="Bottom"

    のように使用します。

    • 回答としてマーク d-kot 2011年4月28日 11:49
    • 回答としてマークされていない d-kot 2011年4月28日 12:04
    2011年4月28日 11:28
  • Tetsuakiさん、早速ありがとうございます。
    <Button Canvas.Left="298" Canvas.Top="925" Content="next" Height="23" Name="next" Width="62" Click="next_Click" VerticalAlignment="Bottom" HorizontalAlignment="Right" />
    のようにしてみました。
    が…。ウィンドウをリサイズすると、相変わらずウィンドウに隠れてしまいます。
    2011年4月28日 12:04
  • Canvasだからですね。。。

    Canvas.Left="298" Canvas.Top="925"

    で固定座標を指定しているので、追従してくれないのです。

    CanvasをGridに換えてみてください。

    よろしくお願いします。


    2011年4月28日 12:16
  • そりゃ Canvas 使ってればそうなるでしょう。Canvas ってのはそういうパネルですから。

    Grid や DockPanel を使ってレイアウトするようにしましょう。

    2011年4月28日 12:17
  • Button の位置を Canvas.Left と Canvas.Top で指定しているところを、それぞれ Canvas.Right と Canvas.Bottom で指定すればよいと思います。
    Visual Studio のプロパティ ウィンドウでは設定できなさそうですので、XAML を直接編集してみてください。
    • 回答としてマーク d-kot 2011年4月28日 15:06
    2011年4月28日 12:18
  • UI仕様によりますが、Canvasに設定してみるとか。

     

        <Canvas Height="209" Margin="122,62,123,41" Name="canvas1" Width="258" VerticalAlignment="Bottom" HorizontalAlignment="Right">
          <Button Content="Button45" Height="89" Name="button1" Width="157" Click="button1_Click" Canvas.Top="79" Canvas.Left="75" />
        </Canvas>
    
    

    2011年4月28日 12:36
  • Tetsuakiさん、またまた早速ありがとうございます。
    Hongliangさん、コメントありがとうございます。

    GridではなくCanvasを使う理由があります。
    Marginの設定がいまいち直感的でないことです。
    オブジェクトを左上端(とかBottomを使えば下端から)配置するのにはCanvasを使うほうがわかりやすいと思うのです。
    ですから、Gridを使うことはできません。

    Hongliangさん、コメントありがとうございます。
    これでできました!
    感謝します。ありがとうございました。

    2011年4月28日 15:05
  • GridではなくCanvasを使う理由があります。
    Marginの設定がいまいち直感的でないことです。
    オブジェクトを左上端(とかBottomを使えば下端から)配置するのにはCanvasを使うほうがわかりやすいと思うのです。
    ですから、Gridを使うことはできません。

    う~ん、わからなくもないですが、直感的に関してはMarginの設定もさほど違いがないように思います。基本的にはGridを使う方法に慣れた方が後々のためだと思います。今回はButtonなので良いですが、例えば検索画面を作成し、上4分の1は抽出条件を入力するTextBoxなどがあり、残り4分の3に検索結果を表示するListViewを配置したとします。この状態でWindowの縦の長さを伸ばした時に、検索結果が表示されるListViewのみの高さが伸びた方が自然でしょう。Canvasだけではこのような動作は実現できないはずです。以下に参考ページがありますので、ご紹介しておきます。

    [WPFへの道 vol.2] AnchorやDockはどうするの?
    http://blogs.msdn.com/b/ttanaka/archive/2010/11/02/wpf-vol-2-anchor-dock.aspx

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/


    2011年4月28日 16:39
    モデレータ
  • trapemiyaさん、コメントありがとうございます。
    なるほど。WPFのデフォルトはGridで、おっしゃるようにGridを使うこともできるといいとは思います。

    ただ、この例を拝読していて、なるほどわたしはWindows的なそういうtextbox+ListViewみたいなウィンドウのアプリケーションを作りたいと思ったことが一度もないし、作ったこともない、とあらためて理解できました。
    それはWindows的には自然かもしれないのですが、わたしが作りたいと思っているインターフェースにとっては、不自然窮まるものだからです。
    違っていることを自分でも整理できました。ありがとうございました。

    2011年5月6日 16:01
  • 特異なことをされているのは過去の質問からもわかります。ですがそのためにはまず前提となる基礎知識を身に着けるべきです。その基礎知識として一般的なUIを指します。

    その上で、特異な部分は基本的に自力で解決すべきかと。フォーラムで質問するにしても、一般的なUIとの差異を示した上で質問するべきでしょう。

    2011年5月7日 2:40