VisualElement の 生成タイミングでサイズを取得してみると NaN になり正しいサイズが取得できない
例えば下記のコードを試してみる
public void OnEnable() { var root = rootVisualElement; var e = new VisualElement(); root.Add(e); var label = new Label(e.contentRect.width.ToString()); root.Add(label); }
とこのように NaN が表示される
これは 生成後すぐだと、レイアウトの構築が済んでいないため発生している
つまり、レイアウト構築が済んだあとに取得すれば正しいサイズが取得できる
そのために、RegisterCallback<GeometryChangedEvent>
を利用する
GeometryChangedEvent
はレイアウトの構築が終わったあとに呼び出されるイベントで
先程のコードにこれを利用すると下記になる
public void OnEnable() { var root = rootVisualElement; var e = new VisualElement(); root.Add(e); e.RegisterCallback<GeometryChangedEvent>(v => { var label = new Label(e.contentRect.width.ToString()); root.Add(label); }); }
結果を見てみると正しく値が取得できている