5

ActualWidthキャンバスをゼロ以外の値にすることはできません。私は実際のシナリオを単純化し、VS の新しい WPF アプリケーションをゼロ以外の値の取得 (および理解) に専念させました。残念ながら、私はゼロしか得ていません。基本的な WPF の理解が欠けているように感じます。私は WPF にあまり詳しくありません。

私はMDSN デモをコピーし、それを少し変更しました。

public partial class MainWindow : Window {

private Canvas myCanvas;
public MainWindow()
{
    InitializeComponent();
    CreateAndShowMainWindow();
}
private void CreateAndShowMainWindow()
{
    // Create a canvas sized to fill the window
    myCanvas = new Canvas();
    myCanvas.Background = Brushes.LightSteelBlue;

    // Add a "Hello World!" text element to the Canvas
    TextBlock txt1 = new TextBlock();
    txt1.FontSize = 14;
    txt1.Text = "Hello World!";
    Canvas.SetTop(txt1, 100);
    Canvas.SetLeft(txt1, 10);
    myCanvas.Children.Add(txt1);

    // Add a second text element to show how absolute positioning works in a Canvas
    TextBlock txt2 = new TextBlock();
    txt2.FontSize = 22;
    txt2.Text = "Isn't absolute positioning handy?";
    Canvas.SetTop(txt2, 200);
    Canvas.SetLeft(txt2, 75);
    myCanvas.Children.Add(txt2);

    Grid content = new Grid();
    content.ColumnDefinitions.Add(new ColumnDefinition { Width = GridLength.Auto });
    content.Children.Add(myCanvas);
    this.Content = content;
    this.Loaded += MainWindow_Loaded;
}

void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
    var canvasRenderWidth = myCanvas.RenderSize.Width;
    var canvasActualWidth = myCanvas.ActualWidth;
} //place breakpoint here

ロード後、キャンバスの ActualWidth はテキスト ボックスと同じになると思いますが、指定されたブレークポイントではゼロです。上記のコードを実行すると、テキストボックスが表示されることに注意してください。

myCanvas.ActualWidth誰かが自動的に になるようにする方法を教えてもらえますか、textbox.ActualWidthまたはこれを行うべきではない理由を教えてもらえますか?

私の実際の使用シナリオでは、列定義の幅が自動に設定されてCanvasいる a の列に があるGridので、キャンバスの幅が大きくなるにつれて幅が大きくなると予想しました。ただし、これは失敗します。ゼロであることが原因であると思わcanvas.ActualWidthれます。

4

1 に答える 1

3

この行を削除すると、機能します。

content.ColumnDefinitions.Add(new ColumnDefinition { Width = GridLength.Auto });

注: キャンバスは、コンテンツに合わせてサイズが変更されることはありません。例でテキストが表示されている理由は、キャンバスがコンテンツをクリッピングしていないためです。

設定するとき

myCanvas.ClipToBounds = true;

テキストも消えます。

于 2014-03-28T12:52:40.077 に答える