問題タブ [onrender]
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 - メジャーを実行したりパスを配置したりせずに、所有者が描画した WPF コントロールに更新/再描画するように手動で指示するにはどうすればよいですか?
コントロールのサブクラスでカスタム描画を行っていますOnRender
。この描画コードは、外部トリガーとデータに基づいています。そのため、トリガーが発生するたびに、そのデータに基づいてコントロールを再レンダリングする必要があります。私たちがやろうとしているのは、レイアウト パス全体を経由せずに、コントロールを強制的に再レンダリングする方法を見つけることです。
上記のように、私が見たほとんどの回答はVisual
、特に私たちのように非常に複雑なビジュアル ツリーの場合、非常に高価な新しいメジャー パスとアレンジ パスを強制するレイアウトを無効にする を無効にすることを中心に展開しています。しかし、繰り返しになりますが、レイアウトは変更されず、VisualTree も変更されません。唯一のことは、異なる方法でレンダリングされる外部データです。そのため、これは厳密には純粋なレンダリングの問題です。
繰り返しますが、再実行する必要があることをコントロールに伝える簡単な方法を探しているだけですOnRender
。新しいものを作成しDependencyProperty
て「AffectsRender」に登録し、コントロールをリフレッシュしたいときに値を設定する「ハック」を見たことがありますが、デフォルトの実装内で何が起こっているのかにもっと興味がありますこれらのプロパティ: その動作に影響を与えるために呼び出すもの。
アップデート:
まあ、フラグでさえ内部的にアレンジパスを引き起こすような呼び出しはないように見えますがAffectsRender
(以下のCodeNakedの回答に従って)、組み込みの動作と作業を示す2番目の回答を投稿しました-単純な null 許容サイズをフラグとして使用してレイアウト パス コードが実行されないようにします。下記参照。
c# - OnRenderで再描画または更新するにはどうすればよいですか?
ダイナミックに何かを描きたいです。次のコードは私のOnRenderを示しています。プログラムの必要な場所にDrawItemを設定しています。しかし、私が電話をかけているときDrawItem =5;
、OnRenderが呼び出されるように、何を呼び出す必要がありますか?
wpf - 複数の場所でパスをどのようにレンダリングできますか?
OnRender オーバーライド中に数百の異なる位置にレンダリングしたい定義済みのパスがあります。DC の PushTransform メソッドについては知っていますが、レンダリングごとに新しい TranslateTransform インスタンスが必要なようです。つまり、何百もの TranslateTransform が必要になるということです。それは効率的ではないようです。
また、単一の TranslateTransform を試し、レンダリングごとに X と Y の位置を変更するだけでしたが、WPF は実際の描画ではなく描画命令を実際にキャッシュするため、最終的にレンダリングするとき、それらはすべて同じ場所にレンダリングされます。それらは、最後に設定されたオフセットを使用して同じ TranslateTransform を共有しています。
では、これを達成するための最良の方法は何ですか?
wpf - この非常に基本的な StreamGeometry (正方形) が Window の OnRender でレンダリングされないのはなぜですか?
わかりました、私は困惑しています。これが正方形をレンダリングしないのはなぜですか? (注、原点に関係なく表示されるように、意図的に正と負の座標を使用しました。x / yが逆になっているかどうかなどはわかりませんでした。)
アップデート
私は別の奇妙なことに気づきました。このコードを赤い背景を持つ Panel のサブクラスに移動すると、赤い背景がレンダリングされ、その前に灰色の境界線がある青い正方形がレンダリングされます。(注:コントロールの境界にクリップされていないため、その正方形全体を見ることができます。)
ただし、単にサブクラスを UserControl に変更すると、灰色の境界線を持つ青い四角形が赤いコントロールの背後にレンダリングされます。(繰り返しますが、クリッピングが無効になっているため、これを見ることができます。)
最後にそれを Control のサブクラスに変更すると、赤い背景が表示されなくなり、灰色の境界線を持つ青い四角形のみが表示されます。これは、Control が独自にレンダリングを行わないためですが、Panel ではなく UserControl の描画で背景色がレンダリングされる理由をまだ説明していないためです。レンダリングされたものの前に表示されるテンプレートの一部である要素があると思いますが、それが何であるかはわかりません。
wpf - WPF UI インタラクションが遅れていますが、なぜですか?
私が抱えている問題を示すために、曲線とカーソルに沿った黒い線を描く以下の簡単な例をコーディングしました。
「numPointsMul」を増やすと、マウスとの相互作用とカーソル線の描画が非常に遅くなる理由を誰かが説明できますか?
グラフ内のポイントの数がこのようにポインターの描画に影響するのはなぜですか? すべてのヒット テストをオフにしたことに注意してください。グラフは でのみ再描画されていOnRender
ます。
ポイントの数を増やすと関数の時間が長くなることがわかりますが、カーソルが移動したときに呼び出されずに無効化イベントに呼び出されるOnRender
ため、ポインターの描画が遅れる理由がわかりません。OnRender
ヒットテストはまだ行われているようですか?
wpf - InvalidateVisual() の後に OnRender が呼び出されない
カスタム WPF コントロールは OnRender をオーバーライドします。このメソッドは、カスタム データからパスを生成して表示します。データ プロバイダーは、依存関係プロパティを使用してバインドされます。Dependency プロパティは、データが変更されたときにイベントを登録します。このイベントは、InvalidateVisual() を呼び出します。
ただし、InvalidateVisual() の後で OnRender が常に呼び出されるわけではありません。
Prism Framework と Region 機能を使用します。問題のコントロールはそのような領域に埋め込まれており、アクティブ化および非アクティブ化されています。ただし、コントロールのプロパティ「IsVisible」は、領域がアクティブなときはいつでも true です。それでも、InvalidateVisual() を呼び出すと、OnRender メソッドは呼び出されません...
OnRender メソッドが呼び出されない原因は何ですか?
extjs - ExtJS 正しいコンポーネントを取得できるように onRender をオーバーライドする方法は?
コンポーネントとしてレンダリングされた div のサイズを取得しようとしています。
そして、この onRender 関数は、通常のレンダリング プロセスを中断します。レイアウト全体が破損し、div (#selector-organization-body) が非常に小さくなっています。だから、間違った方法で onRender をオーバーライドしていたのではないかと思っています。
c# - jqueryの無効な日付に表示されますか?
このコードを実行しようとしていますが、var nowTemp = new Date();
無効な日付が表示され、理由がわかりません。助言がありますか?