問題タブ [actualwidth]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
2047 参照

wpf - カスタム描画とActualWidthを使用したWPFカスタムコントロール

独自の描画ロジックを使用してカスタムコントロール( Controlから派生)を作成しようとしています。コントロールは、コントロールの左上隅から右下隅に対角線を引くだけです。このロジックは、コントロールのActualWidthActualHeightに基づいています。これらは、コントロールをレンダリングするときにのみ使用できます(AFAIK)。

私の質問は、カスタム描画を効率的に行うための適切な方法は何ですか?

これに関するドキュメントはあまりありません。OnPropertyChangedが起動されるたびに強制的に更新/再描画するなど、愚かなまたは不必要なことをしているのではないかと思います...

コントロールのテンプレートは次のとおりです。

そして、ここにロジックがあります:

0 投票する
2 に答える
1947 参照

c# - ContentPresenterのActualWidth/ActualHeightを取得できません

私のアプリケーションでは、FrameworkElementカスタム関数を使用してアタッチされたビューモデルオブジェクトを取得していますGetVisualChildWithDataContext(以下を参照)。

何が起こっているのかというと、この関数は、プロパティが0のオブジェクトを返します。ContentPresenterコンテンツは24x24の長方形で構成されているため、2つのプロパティの値は24になると予想されます。ActualWidthActualHeight

私の質問は、ビューモデルだけを使用して、期待している値(ActualWidthおよびActualHeight24の値)を取得するにはどうすればよいですか?これを行うためのより良い方法があれば、私はすべての耳です。

御時間ありがとうございます。(以下のサンプルを参照)

xaml:

背後にあるコード:

0 投票する
0 に答える
172 参照

wpf - ビューボックスの実際の幅が実際よりもずっと速く伸びているのはなぜですか?

ViewBoxes の一部のコントロールに共通する問題は、Viewbox を埋めるために引き伸ばされないことです。そのため、次のコードでそれを修正しようとしました。

最初はうまくいくようです。しかし、Viewbox のActualWidthレポート値は、実際よりもはるかに速く変化します。最初は 74 ですが、1 ピクセル広くするとすぐに 140 近くになり、別のピクセルで約 260 に跳ね上がります。その後、400 を超えてこの値にとどまります。

ここで何が起こっているのか分かりますか?

0 投票する
1 に答える
4266 参照

c# - オブジェクトの ActualHeight と ActualWidth は常にゼロです

私は次CanvasTextBlockようなものを持っています:

私のアプリは、ユーザーがこのページに移動すると、TextBlockが中央に配置され、CanvasTextBlock幅がキャンバスの幅よりも大きい場合、マーキー アニメーションが発生するようになっています。

このメソッドは OnNavigatedTo と呼ばれます。およびプロパティが常に 0.0 として返されるTextBlockため、 が中央に表示されない理由がわかりません。これは Windows ストア アプリであり、さまざまな画面サイズに合わせて拡張できるようにしたいため、固定サイズを配置したくありません。ActualHeightActualWidth

何か案は?私は立ち往生しています。

0 投票する
2 に答える
786 参照

.net - ListBoxItemのActualWidthへのバインド

私は、ListBox基本的にキャンバスであるを持っています。アイテムはとして表示されRectanglesます。ListBoxItem's Canvas.Left長方形の位置は、 andCanvas.Rightプロパティを介してアイテムのデータにバインドされます。

これはListBox' Template、を生成しCanvasます。

アイテムのListBox' ItemContainerStyle位置を設定します。

これは実際に機能します。を境界線で囲むContentPresenterと、境界線の位置とサイズが正しくなります。

これで、長方形は実際の幅Widthと等しくなるはずです。ListBoxItem'sしたがって、ItemTemplate次のようになります。

ただし、このバインディングを適用すると、長方形は表示されません。一定の幅を設定すると、すべてが正しくレンダリングされます。

長方形内の長方形の位置を設定する方法はありCanvasますか?

アップデート

WPFツリービジュアライザーを使用して、これがおそらくの問題であることに気付きましたContentPresenter's ActualWidth。次のスクリーンショットは、Canvas.LeftandCanvas.Rightプロパティが正しく設定されて いることを示しています。ツリービジュアライザーのスクリーンショット

ただし、ActualWidthプロパティは4に設定されています(StrokeThickness含まれているのRectangleは4です)。このレイアウトの問題はどのように解決できますか?

さらに、私は上記の私の声明を修正しなければなりません。をで囲むContentPresenterBorder、正しい結果が得られません。代わりに、レイアウト全体が壊れているようです。

アップデート2

MSDNは次のように述べています。

子要素のCanvas.Rightオフセットは、親Canvasのサイズには影響しません。

それらを指定すると、添付されたプロパティCanvas.TopまたはCanvas.LeftがCanvas.BottomまたはCanvas.Rightプロパティよりも優先されます

したがって、幅を明示的に指定する必要があるようです。これは、適切なコンバーターでは小さな問題になるはずです。

0 投票する
1 に答える
5416 参照

wpf - DataGridColumn の Width プロパティを親 DataGrid の ActualWidth にバインドする

here is the first Version of my XAML Codeのプロパティを手動でバインドして、以前の質問を解決しようとしました。WidthDataGridTextColumn

少し調査した後、私の問題に対する答えを提供していると思われるこの投稿DataGridを見つけ、コードを更新しました。

しかし、今はこの XamlParseException を取得しています

では、どのようWidthに aDataGridColumnActualWidthプロパティをその親のプロパティにバインドできますかDataGrid

0 投票する
1 に答える
3359 参照

.net - ウィンドウが表示される前にActualWidthActualHeightを計算する方法

ウィンドウが表示される前に(たとえば、ウィンドウコンストラクターで)、(グリッドの中央のセルにある)StackPanel widthを計算しようとしています。heightどのようにそれを達成することができますか?

stackPanelセットDesiredSizeと同様にWindowを測定します{0;0}

編集1

FixedPageでは次のように機能します。

次に、にアクセスできstackPanel.ActualWidthますstackpanel.ActualHeight

ただし、ウィンドウの場合は機能しません。

0 投票する
2 に答える
1511 参照

wpf - widthが値に設定されている場合、実際の幅がゼロになるのはなぜですか。WPF

を拡張するクラスがありCanvasます。作成時に、その幅を明示的に値に設定します。

次に、拡張キャンバスのインスタンスがcnvPreview.Children.Add(e)どこにあるかを使用して、このインスタンスを別のキャンバスのキャンバスに追加します。e

ただし、アプリケーションを実行するActualWidthActualHeight、これらのキャンバスのとは0になります。

これはどのように修正できますか?

0 投票する
1 に答える
474 参照

silverlight - 動的にバインドすると、Border の ActualHeight / ActualWidth が期待どおりにならない

Gridaに a に2 つの境界線がありUserControlます。最初の境界は行 1 にあり、2 番目の境界は行 2 にあります。

境界線の高さも行の高さに収まるように、値を行定義に動的にバインドしています。

ViewModel からこのオブジェクトを作成し、UserControlそのコード ビハインドでメソッドを呼び出すと、境界線の元の高さが得られず (私が期待するのは、私が指定した値です)、両方の境界線のグリッドの高さの半分の長さを示しています。しばらくすると、境界線のサイズが期待どおりに変更されます。

最初から正しい値を取得したい。この動作を実現するにはどうすればよいですか?

これは私のコードビハインドメソッドです。このメソッドは my から呼び出されますViewModel。境界SizeChangedイベントの後でのみ、正確な実際の幅と高さを取得しています。

0 投票する
2 に答える
642 参照

.net - 測定/配置後でも、グリッド内のカスタム コントロールの ActualWidth と ActualHeight はゼロです

カスタム コントロール、GameView を持つ Win8 アプリがあります。このアプリは、ページ上で (gvMap、gvOurBase、および gvEnemyBase として) 3 回インスタンス化し、グリッドに配置しました。コントロールの実際のサイズを取得して、RenderTransform を設定し、適切なスケーリングですべてをレンダリングできるようにする必要があります。

ただし、コントロールのActualWidthまたはを取得しようとすると、常にゼロになります。ActualHeightこれは、ページが読み込まれるまで待って、コントロールで Measure と Arrange を呼び出しても発生します。

コントロールのサイズを取得するにはどうすればよいですか? それとも、彼らがグリッドにいる間、これを行うことは許可されていませんか? コントロールのサイズに依存しない RenderTransform を実行する別の方法はありますか? 各コントロールがゲーム マップ全体の特定のセクションを表示するようにします。gvMap はマップ全体を表示し、gvOurBase はプレイヤーが都市を持つマップのセクションを表示し、gvEnemyBase は敵が都市を持つマップのセクションを表示します。