1

その場でキャンバスを作成する次のコードがあります。

    public MainWindow()
    {
        InitializeComponent();

        Canvas canvas = new Canvas();
        canvas.Height = 300;
        canvas.Width = 275;
        canvas.Background = Brushes.Blue;

        this.AddChild(canvas);
        ...
    }

対応するXAMLには、Visual Studioによって生成されたボイラープレートのMainWindow定義以外には何もありません(VSがデフォルトで提供するグリッドエントリを削除しました)。

<Window x:Class="canvas2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" Background="Gray">
</Window>

コードは、キャンバスをアプリケーションのメインウィンドウの中央に配置します。コードを使用して、キャンバスを自分で配置するにはどうすればよいですか?

4

2 に答える 2

3

通常、ウィンドウにはある種のトップレベルコンテナ、おそらく別のキャンバスがあります。

<Window ...>
    <Canvas Name="root"/>
</Window>

次に、CanvasをルートCanvasに追加します。

Canvas canvas = new Canvas();
canvas.Height = 300;
canvas.Width = 275;
canvas.Background = Brushes.Blue;

// set child canvas position
Canvas.SetLeft(canvas, ...);
Canvas.SetTop(canvas, ...);

// add child canvas to root
root.Children.Add(canvas);

おそらく、グリッド、キャンバスなどのWPFパネルについて知っておくべき最も重要なことは、それらをネストできることです。たとえば、キャンバスをグリッドに配置し、それを別のグリッドに何度でも配置できます。

ただし、最上位のパネルは、グリッドやキャンバスなどContent、ウィンドウのプロパティに設定されます。コードでは、以下に示すようにそれを行うことができますが、そうする理由はほとんどありません。

public MainWindow()
{
    InitializeComponent();

    var rootPanel = ...;
    Content = rootPanel;
}
于 2013-03-16T17:15:18.090 に答える
1

まず、「位置」の意味を指定する必要があります。

CanvasのMarginプロパティを指定して、コンテナ(ウィンドウ)に応じて配置されるようにすることができます。ただし、Marginと連携して機能するHorizo​​ntalAlignmentプロパティとVerticalAlignmentプロパティも考慮してください。

代わりに、「絶対的な」ポジショニングを意味するかもしれません。たとえば、コンテナのサイズとは関係なく、キャンバスを特定のポイント/サイズに配置します。その場合、最も簡単な方法は、Canvasを別のCanvasの内側に配置し、Canvas.LeftプロパティとCanvas.Topプロパティを設定して内側のCanvasを配置することです。もちろん、幅と高さも指定する必要があります。

乾杯

于 2013-03-16T17:15:06.287 に答える