問題タブ [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.
wpf - カスタム描画とActualWidthを使用したWPFカスタムコントロール
独自の描画ロジックを使用してカスタムコントロール( Controlから派生)を作成しようとしています。コントロールは、コントロールの左上隅から右下隅に対角線を引くだけです。このロジックは、コントロールのActualWidthとActualHeightに基づいています。これらは、コントロールをレンダリングするときにのみ使用できます(AFAIK)。
私の質問は、カスタム描画を効率的に行うための適切な方法は何ですか?
これに関するドキュメントはあまりありません。OnPropertyChangedが起動されるたびに強制的に更新/再描画するなど、愚かなまたは不必要なことをしているのではないかと思います...
コントロールのテンプレートは次のとおりです。
そして、ここにロジックがあります:
c# - ContentPresenterのActualWidth/ActualHeightを取得できません
私のアプリケーションでは、FrameworkElement
カスタム関数を使用してアタッチされたビューモデルオブジェクトを取得していますGetVisualChildWithDataContext
(以下を参照)。
何が起こっているのかというと、この関数は、プロパティが0のオブジェクトを返します。ContentPresenter
コンテンツは24x24の長方形で構成されているため、2つのプロパティの値は24になると予想されます。ActualWidth
ActualHeight
私の質問は、ビューモデルだけを使用して、期待している値(ActualWidth
およびActualHeight
24の値)を取得するにはどうすればよいですか?これを行うためのより良い方法があれば、私はすべての耳です。
御時間ありがとうございます。(以下のサンプルを参照)
xaml:
背後にあるコード:
wpf - ビューボックスの実際の幅が実際よりもずっと速く伸びているのはなぜですか?
ViewBoxes の一部のコントロールに共通する問題は、Viewbox を埋めるために引き伸ばされないことです。そのため、次のコードでそれを修正しようとしました。
最初はうまくいくようです。しかし、Viewbox のActualWidth
レポート値は、実際よりもはるかに速く変化します。最初は 74 ですが、1 ピクセル広くするとすぐに 140 近くになり、別のピクセルで約 260 に跳ね上がります。その後、400 を超えてこの値にとどまります。
ここで何が起こっているのか分かりますか?
c# - オブジェクトの ActualHeight と ActualWidth は常にゼロです
私は次Canvas
のTextBlock
ようなものを持っています:
私のアプリは、ユーザーがこのページに移動すると、TextBlock
が中央に配置され、Canvas
のTextBlock
幅がキャンバスの幅よりも大きい場合、マーキー アニメーションが発生するようになっています。
このメソッドは OnNavigatedTo と呼ばれます。およびプロパティが常に 0.0 として返されるTextBlock
ため、 が中央に表示されない理由がわかりません。これは Windows ストア アプリであり、さまざまな画面サイズに合わせて拡張できるようにしたいため、固定サイズを配置したくありません。ActualHeight
ActualWidth
何か案は?私は立ち往生しています。
.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.Left
andCanvas.Right
プロパティが正しく設定されて
いることを示しています。
ただし、ActualWidth
プロパティは4に設定されています(StrokeThickness
含まれているのRectangle
は4です)。このレイアウトの問題はどのように解決できますか?
さらに、私は上記の私の声明を修正しなければなりません。をで囲むContentPresenter
とBorder
、正しい結果が得られません。代わりに、レイアウト全体が壊れているようです。
アップデート2
MSDNは次のように述べています。
子要素のCanvas.Rightオフセットは、親Canvasのサイズには影響しません。
それらを指定すると、添付されたプロパティCanvas.TopまたはCanvas.LeftがCanvas.BottomまたはCanvas.Rightプロパティよりも優先されます
したがって、幅を明示的に指定する必要があるようです。これは、適切なコンバーターでは小さな問題になるはずです。
wpf - DataGridColumn の Width プロパティを親 DataGrid の ActualWidth にバインドする
here is the first Version of my XAML Codeのプロパティを手動でバインドして、以前の質問を解決しようとしました。Width
DataGridTextColumn
少し調査した後、私の問題に対する答えを提供していると思われるこの投稿DataGrid
を見つけ、コードを更新しました。
しかし、今はこの XamlParseException を取得しています
では、どのようWidth
に aDataGridColumn
のActualWidth
プロパティをその親のプロパティにバインドできますかDataGrid
.net - ウィンドウが表示される前にActualWidthActualHeightを計算する方法
ウィンドウが表示される前に(たとえば、ウィンドウコンストラクターで)、(グリッドの中央のセルにある)StackPanel
width
を計算しようとしています。height
どのようにそれを達成することができますか?
stackPanelセットDesiredSize
と同様にWindowを測定します{0;0}
編集1
FixedPageでは次のように機能します。
次に、にアクセスできstackPanel.ActualWidth
ますstackpanel.ActualHeight
。
ただし、ウィンドウの場合は機能しません。
wpf - widthが値に設定されている場合、実際の幅がゼロになるのはなぜですか。WPF
を拡張するクラスがありCanvas
ます。作成時に、その幅を明示的に値に設定します。
次に、拡張キャンバスのインスタンスがcnvPreview.Children.Add(e)
どこにあるかを使用して、このインスタンスを別のキャンバスのキャンバスに追加します。e
ただし、アプリケーションを実行するActualWidth
とActualHeight
、これらのキャンバスのとは0になります。
これはどのように修正できますか?
silverlight - 動的にバインドすると、Border の ActualHeight / ActualWidth が期待どおりにならない
Grid
aに a に2 つの境界線がありUserControl
ます。最初の境界は行 1 にあり、2 番目の境界は行 2 にあります。
境界線の高さも行の高さに収まるように、値を行定義に動的にバインドしています。
ViewModel からこのオブジェクトを作成し、UserControl
そのコード ビハインドでメソッドを呼び出すと、境界線の元の高さが得られず (私が期待するのは、私が指定した値です)、両方の境界線のグリッドの高さの半分の長さを示しています。しばらくすると、境界線のサイズが期待どおりに変更されます。
最初から正しい値を取得したい。この動作を実現するにはどうすればよいですか?
これは私のコードビハインドメソッドです。このメソッドは my から呼び出されますViewModel
。境界SizeChanged
イベントの後でのみ、正確な実際の幅と高さを取得しています。
.net - 測定/配置後でも、グリッド内のカスタム コントロールの ActualWidth と ActualHeight はゼロです
カスタム コントロール、GameView を持つ Win8 アプリがあります。このアプリは、ページ上で (gvMap、gvOurBase、および gvEnemyBase として) 3 回インスタンス化し、グリッドに配置しました。コントロールの実際のサイズを取得して、RenderTransform を設定し、適切なスケーリングですべてをレンダリングできるようにする必要があります。
ただし、コントロールのActualWidth
またはを取得しようとすると、常にゼロになります。ActualHeight
これは、ページが読み込まれるまで待って、コントロールで Measure と Arrange を呼び出しても発生します。
コントロールのサイズを取得するにはどうすればよいですか? それとも、彼らがグリッドにいる間、これを行うことは許可されていませんか? コントロールのサイズに依存しない RenderTransform を実行する別の方法はありますか? 各コントロールがゲーム マップ全体の特定のセクションを表示するようにします。gvMap はマップ全体を表示し、gvOurBase はプレイヤーが都市を持つマップのセクションを表示し、gvEnemyBase は敵が都市を持つマップのセクションを表示します。