問題タブ [layouttransform]
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 - RenderTransform 対 Panel Properties 対 Layout トランスフォーム
UIElements
前後のドラッグ ムーブを達成するための最良の方法を知りたいPanels
です。
Canvas.SetTop
、などは.Right
、.Left
Render Transform よりもわずかに高速であり、おそらくよりレイアウトに適した方法であることがわかっています。
他の種類のパネルでのフリードラッグ移動動作はどうですか?
で子をサイズ変更/ドラッグするときに、オフセットを維持しながら Canvas SetLeft を適用するにはどうすればよい
Grid
ですか?
特定のレイアウトが他のパネル タイプで採用されているため、明らかに一貫性がないように見えますが、一部のシナリオでは、元のパネル動作 (グリッド内の列間をドラッグするなど) を置き換える自由配置ドラッグ移動動作を採用すると便利な場合があります。
おそらく、Bool IsDragEnabled
元のパネルの動作とドラッグ移動の動作を切り替えるプロパティを使用します。
wpf - 使用可能なスペースに合わせてWPFTextBox/RichTextBoxコンテンツを自動スケーリングします
私は次の問題を抱えています:
コンテンツのレイアウト(フォントサイズ、インデントなど)を変更せずに、使用可能なスペースの最大値に合わせて内部のコンテンツのサイズを自動的に変更できるRichTextBoxをセットアップしたいと思います。
TextBoxのコンテンツのスケーリングについてはすでに多くの質問を見ましたが、すべての質問はある種のズームスライダーに関連していました。私が欲しいのは、実際にスケーリングを計算して、TextBoxに自動的に最適になるようにすることです。
これまでに確立したのは、Scalingを計算するためのコードビハインドメソッドをトリガーできるように、ScrollViewer内にラップされたRichTextBoxテンプレートのAdornerDecorator内のLayoutTransformです。
最初は、すべてのコンテンツがViewPortに収まる場合、RichTextBoxはスケーリングされません。垂直スクロールバーを有効にする必要があるとすぐに、ScaleFactorを変更します。
これは、TextWrappingに関しては、かなりうまく機能します(XとYをスケーリングしても、テキストが異なる位置で折り返され、さらに高さが変更されることはありません)。何か案は?
物事をもう少し明確にするために、小さなデモを作成しました。
そして、コードビハインド:
xaml - WP7: ListBoxItem の LayoutTransform
ここに私のXAMLがあります:
このコード ビハインド (下記) では、削除アクションをアニメーション化しようとしています。アイテムが選択されたら、それを削除します。ScaleTransform で視覚的にアニメーション化します。WPF では LayoutTransform を使用しますが、WP/SL には RenderTransform しかないため、RenderTransform を使用しています。その結果、周囲のレイアウトがサイズの変更に反応しません。レコードは引き続き正しく削除されますが、視覚効果は低下します。
WPでこれを行う方法はありますか?周囲のコンテンツが応答するように ListBoxItem のサイズを変更する方法はありますか?
wpf - WPFグリッドの行の高さがコンテンツの高さにサイズ変更されないのはなぜですか?
私はこれに似たグリッドを持っています:
myNamespace:MyRotatedTextBlockは、次のようなカスタムWPFコントロールです。
問題は、ウィンドウを開いたときに、回転したテキストを含む2番目の行が表示されないことです。Height
しかし、2番目の行(に設定されている"Auto"
)をに置き換える"100"
と、2番目の行が表示され、次の行が含まれていることがわかります。MyHeader2
wpf - ScaleXとScaleYのLayoutTransformアニメーションは、それらとの結合を破っています
wpfCanvasクラスから派生した「MyCanvas」というカスタムクラスがあります。MyCanvasには、キャンバスのスケール変換を指定するDependencyプロパティ'Scale'があります。ここで、Scaleの値が変更されたら、古い値から新しい値への変換をアニメートしたいと思います。そのために私はLayoutTransform.BeginAnimation(...)
メソッドを使用しています。
コード:
XMAL:
しかし、このコードを実行した後、ScaleX
and ScaleY
with Scale
(viewmodelのプロパティ)のバインドが壊れています。つまり、の値をScale
変更しても、キャンバスのスケールは変更されません。
エラーメッセージ(スヌープを使用):
System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=Scale; DataItem=null; target element is 'ScaleTransform' (HashCode=796423); target property is 'ScaleX' (type 'Double')
System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=Scale; DataItem=null; target element is 'ScaleTransform' (HashCode=796423); target property is 'ScaleY' (type 'Double')
誰かがこれに対する解決策を持っているかどうか私に知らせてください。ありがとう
wpf - LayoutTransform と RenderTransform のどちらを適用した場合のパフォーマンスへの影響は?
私は LayoutTransform と RenderTransform の両方を扱ってきましたが、それぞれが以前のプロジェクトで用途を見つけた特定のシナリオに適していることを知っています。
それでも、パフォーマンスの観点から、たとえば WPF プロファイリング ツールを使用している場合、UI パフォーマンスへの影響が少ないのはどれですか?
wpf - RotateTransformは、画像を回転させるだけでなく、画像をシフトします
さて、左上隅を中心に回転させたいImageオブジェクトがあります。'X'度のRotateTransformを設定します。マイイメージのマージンは(400,400,0,0)に設定されています。これにより、キャンバスの中央に配置されます。
問題は、異なる回転角を適用すると、画像が左右にシフトすることです。投稿を見ると、なぜこれが起こっているのかがわかりました。回転変換は境界の長方形を計算するため、画像を回転すると、境界の長方形が大きくなります。マージンはその境界の長方形に適用され、角度が変化すると実際の画像が下方向および右方向にシフトします。
私が欲しいのは、画像の左上隅が常にキャンバス上で正確に(400,400)にあり、画像がその点を中心に回転することです。
私はいくつかの計算を行い、左右のマージンをシフトすることで動作させることができますが、次の式を使用して、象限1と4(0〜90度)および(270〜360度)でのみ正しい計算を行うことができます。
0〜90度の場合:(マージンのTOP部分を変更する必要があります。必要なマージンは(400,400,0,0)Margin =(400-sin(angle)* Image.Height、400、0、0);
270〜360度の場合:(マージンの上部を変更する必要があります。必要なマージンは(400,400,0,0)です。Margin=(400、400 + sin(angle)* Image.Width、0、0);
RotateTransform.Transform(point)とImage.TranslatPoint(point)を使用して実験しましたが、それらを機能させることができないようです。
誰か私に何か提案はありますか?
いつでも画像の結合長方形が何であるかを理解できれば、その幅/高さと画像の幅/高さの違いを理解し、それを使用してマージンを適切にシフトできると思います。
私は自分の問題を示す小さなアプリをまとめました。実行中、アプリは長方形の左上を配置したい場所に赤い点を表示します。画像の代わりにグリッドを使用するように簡略化しました。画面の左上には、回転角を指定できるテキストボックスがあります。テキストボックスの右側には2つのRepeatButtonがあり、クリックして押したままにすると角度が増減します。角度を変更すると、グリッドの左上隅が赤い点から離れる方向にシフトすることに注意してください。左上隅にピンを置き、コーナーが始まるドットからずれることなくピンを中心に回転させたように動作させたいです。
ご協力いただきありがとうございます。
サンプルアプリのコードは次のとおりです。
xaml:
CodeBehind:
wpf - LayoutTransform を TranslateTransform または MatrixTransform に設定すると、Canvas 子の変換が機能しない
キャンバス (rootCanvas) を含むウィンドウで構成される単純なアプリケーションがあります。これに別のキャンバス (テスト) を追加し、子キャンバスの LayoutTransform に別の変換を適用しようとしています。これはすべて、XAML を使用するのではなく、プログラムで行われています。
一部の変換は機能していますが、他の変換は次のとおりではありません。
- LayoutTranform が RotateTransform に設定されている場合、期待どおりに機能します。
- TranslateTransform に設定されている場合、翻訳は適用されていないように見え、テスト キャンバスはまだ rootCanvas の上隅にあります。
- 回転と平行移動を適用して構築された MatrixTransform に設定すると、回転のみが適用されたように見えます。
コードを以下に示します。
翻訳が期待どおりに機能していないように見える理由が理解できないので、誰かがここで私が間違っていることを説明してくれれば非常に感謝しています.
前もって感謝します、
ウィブス
wpf - 動的 LayoutTransform を使用した WPF ToolTip スタイル
UI をスケーリングするアプリがあり、それに合わせてツールヒントをスケーリングしたいと考えています。私はこれをやってみました:
...scaleTransf
コードを介して変更するリソースはどこにありますか:
と:
ツールヒントのほとんどはサイズが調整されますが、C# コードで作成されたツールヒントの一部は調整されません。確認したところ、コードで Style や LayoutTransform を設定していないようで、何が問題なのかよくわかりません...さらに、上記の XAML コードが数日間正常に機能したという印象があります。前に。:(
コードビハインドで LayoutTransform を設定せずに常に機能させるためにできることはありますか?
編集:スケールを変更しないツールチップは、以前に表示されたものです。
EDIT1 :LayoutTransform
各ToolTip
インスタンスをscaleTransf
コード ビハインドに設定すると、SetResourceReference()
すべて正常に動作します。作成されるすべてのものに対してまったく同じことを行うはずなのに、スタイルが機能しない理由がわかりませんToolTip
... WPFに関する私の限られた知識に基づいて、これをバグと呼びます!
EDIT2:
私もこれを試しました:
EDIT3: DependencyProperty を使用してこれを解決しようとする私の試み:
MainWindow.xaml.cs で:
MainWindow のどこかで、ユーザー入力に応答して:
XAML スタイル:
このコードを使用すると、それに応じてツールチップが 1 つもスケーリングされないように見えます。
wpf - WPF: LayoutTransform でサイズが変更された Image で 1:1 ピクセル レンダリングを取得する
私はこれについて広範囲に検索し、部分的な答えを見つけたと言うことから始めましょう。
スケーリングされていないビットマップ イメージを WPF アプリケーションに表示する必要があります。ビットマップの 1 ピクセルをディスプレイの 1 ピクセルにマップしたい。ビットマップの複数のバージョンを出荷することで、複数の解像度をサポートするつもりです。しかし、特定のビットマップが選択されると、設計どおりに正確にレンダリングされることを知りたいです。
WPF で発生する自動スケーリングを克服するための私の戦略は、(OS DPI 設定によって) 自動的に適用されているものを確認し、逆の LayoutTransform をウィンドウの最も外側のコンテナーに適用することです。
これにより、ユーザーの DPI 設定に関係なく、アプリはウィンドウのコンテンツを WPF ピクセルとハードウェア ピクセルの 1:1 の比率でレンダリングします。ここまでは順調ですね。
そのコードは次のようになります。(これが 1.0 の引数で呼び出されると仮定します)。
ここまでは、すべてがうまく機能しています。Windows DPI を何に設定しても、そのメイン コンテナーのコンテンツは常にまったく同じサイズであり、ビットマップは正確にレンダリングされます。
ここからは楽しい部分です。解像度固有のアートワークを提供し、UI 全体を適切にスケーリングすることで、さまざまな画面解像度をサポートしたいと考えています。
これには LayoutTransform が非常にうまく機能することがわかりました。したがって、上記のメソッドを 1.25 または 1.5 などで呼び出すと、UI 全体がスケーリングされ、すべてが完璧に見えます。新しいスケーリングされた寸法にぴったりのサイズ。
たとえば、XAML で 100x100 の画像があるとします。私のアートワークには、100x100、125x125、150x150 の 3 種類があります。画像を格納するコンテナーをスケーリングするときは、その画像のソースも適切なものに変更します。
興味深いことに、画像オブジェクトが係数でスケーリングされたときに積分結果が得られる位置にある場合、スケーリングされた画像はきれいに見えます。つまり、画像に次のプロパティがあるとします。
係数 1.25 を適用すると、結果は 15 と 125 になり、画像は見栄えがよくなります。しかし、画像が 1 ピクセル移動すると、次のようになります。
ここで係数 1.25 を適用すると、15.25 と 125 が得られ、結果はお粗末に見えます。
明らかに、これはある種の丸めの問題またはそのようなもののように見えます。だから私は試しました:
ウィンドウ、スケーリングされているコンテナ、および画像オブジェクトでこれらを試しました。そして、何も機能しません。画像はまったくスケーリングされるべきではないため、 BitmapScalingMode はとにかく意味がありません。
これに光を当てることができる人には永遠に感謝します。