4

Gridいくつかのデータを表す があり、その上に を重ねていくつかの行をレイアウトする必要がありますCanvas。はCanvasそれ自身の中にありUserControlます。

問題は、 の幅と高さCanvasのサイズが変更されると、 とその内容が自動サイズ変更されることです。Grid

Canvas内部に aを追加しましたViewBoxが、うまくいきませんでした。のGridサイズが変更されても、 は変更しCanvasません。の目的はCanvas、定規のような機能をグリッドの上に重ねることです。

あなたの解決策を楽しみにしています。

編集

グリッドにはキャンバスとは異なる情報が表示されるため、グリッドのスタイルを使用してキャンバスを置き換えることはできません。さまざまなサイズのバー列 (私の場合はグリッド) があり、日がオーバーレイの線 (ガント チャートと同様) であるチャートと考えてください。

私のコード:

    taxCanvas = new TimeAxis();
    Grid.SetRowSpan(taxCanvas, GRightMain.RowDefinitions.Count);
    Grid.SetColumnSpan(taxCanvas, GRightMain.ColumnDefinitions.Count);

    Grid.SetColumn(taxCanvas, 0);
    Grid.SetRow(taxCanvas, 0);


    Grid.SetZIndex(taxCanvas, -1);

    taxCanvas.Height = GRight.ActualHeight;
    taxCanvas.Width = GRight.ActualWidth;

    GRightMain.Children.Add(taxCanvas);

TimeAxis は私のキャンバス ユーザー コントロールです。GRightMain は、私のキャンバスとコンテンツ (Gright) を持つグリッドの両方を同じ行と列に保持するグリッドです。

お役に立てれば

4

3 に答える 3

1

Canvasバインディングを使用して、 のサイズと のサイズGridを互いに「バインド」できます。したがって、 のGridサイズが変更されると、Canvasも自動的に変更されます。

Converterまた、境界線からの距離のように計算してオフセットする必要があるバインディングにa を使用することもできます。

WPF でバインドすることは常に良い考えなので、その仕組みの基本を理解していることを確認してください。

とにかく、サイズ イベントのコード ビハインド (C#/VB) でいつでも実行できます。1 つのコントロールのサイズを決定し、別のコントロールに設定するだけです。Grid のactualHeightプロパティを取得し、キャンバスのheightプロパティに設定するのと同様です。

多分これはあなたにアイデアを与えるでしょう: http://blogs.msdn.com/bencon/archive/2006/05/10/594886.aspx または http://www.switchonthecode.com/tutorials/wpf-tutorial-binding-コンバーター

于 2009-11-02T09:55:28.170 に答える
1

あなたがしようとしていることは何ですか?グリッド全体にグリッド線を追加したいだけの場合は、このようにスタイルを設定することで実行できます。または、 Adornerを使用することもできます。それらは、別のレイヤーで要素を装飾/装飾するためにあります。装飾の良いところは、それらが別のレイヤーにあるにもかかわらず、それらが装飾する要素と同期 (サイズ、位置、変換) を維持することです。

于 2009-11-02T10:14:00.733 に答える