問題タブ [visual-tree]
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 - 新しいビジュアル子要素が追加されたことを検出する方法は?
いくつかのカスタム セキュリティ設定に基づいて、ウィンドウの子コントロールを読み取り専用および無効に変更します。これを実現するために、ウィンドウの読み込み時に子コントロールをループします。
これはうまくいきます。99%完璧。
私のウィンドウには、コンテンツが ComboBox に基づいている ItemsControl があります。ComboBox を変更すると、ItemsControl の子コントロールが再びデータバインドされます。ただし、セキュリティ(読み取り専用/無効)はもはや当てはまりません。
ソリューションにジャンプする前に、ComboBox の変更イベントを処理できることはわかっています。しかし、私はそのようなボックスをたくさん持っており、開発者がウィンドウ/フォームに何を追加しても、ウィンドウレベル (ベースと考えてください) に適用できる一般的なソリューションはありません。
私の質問 (長いリードインで申し訳ありません) は、データバインディングなどの動的なアクティビティが原因で新しい子がウィンドウに追加されたことをどのように検出できますか? NewChildAdded イベントはありますか? DataBindingJustChangedThings イベントはありますか?
何かあるに違いない。
ソリューションにタイマーが含まれている場合は、返信する必要はありません。私のフォームは複雑すぎて、その余分な負荷を処理できません。また、ティック間の遅延は、セキュリティ上の問題として現実的すぎます。
あなたは考えているかもしれません.outer-containerを読み取り専用または無効にするだけです. しかし、これはエキスパンダー、複数行のテキストボックス、リストボックスなどに悪影響を及ぼします。このようなアプローチは、粒度が十分ではありません。もちろん、以前に反復を開始した場所です。
ソリューションにスタイルが含まれている場合は、コントロールごとにアプローチをオーバーライドする方法を含める必要があります。一部のコントロール (チェックボックスなど) は UI レイアウトに目的があるため、無効にすることはできません。
制約があり申し訳ありませんが、本番環境でソリューションを使用する予定です。
ありがとうございました。
c# - コントロールを最上位の Silverlight に設定する
[状況]
スタック パネルに追加したカスタム アイテム コントロールがあり、その後はドラッグして自由に移動できます。
[問題]
3 つの項目を追加した後、最初の項目を 2 番目または 3 番目の項目にドラッグすると、後ろにジャンプします。
2 番目のアイテムを最初のアイテムの上にドラッグすると前に移動しますが、3 番目のアイテムの上にドラッグすると後ろに移動します。
コントロールのドラッグが常にビジュアル ツリーの上にあるようにするにはどうすればよいですか?
c# - 両方がDataGridTemplateColumnにある場合は、ボタンからTextBlockをクリアします
DataGridTemplateColumnを持つDataGridがあります。DataGridTemplateColumnには、ボタンとTextBlockが含まれています。ボタンを押すとtextBlockのテキストがクリアされるようにしたいと思います。それ、どうやったら出来るの ?
XAML:
CSコード:
wpf - WPF 3.5 のネストされたデータグリッド行の詳細がビジュアル ツリーに表示されない
そこで、次のような素敵なネストされたデータグリッドを構築します。
RowDetailsVisibilityMode プロパティが VisibleWhenSelected に設定されているため、行のノード DataGridDetailsPresenter には子がありません。プロパティが Visible に設定されている場合、DataGridDetailsPresenter の子が表示されます。
RowDetailsVisibilityMode プロパティが VisibleWhenSelected の場合、Visual ツリーにすべてのノードを強制的に含めるにはどうすればよいですか?
どんな入力でも大歓迎です。
wpf - Silverlight でビジュアル ツリーのレンダリングの速度をテストする方法は?
たとえば、次のような大量のシェイプを含むキャンバスを作成します。
次に、すべてのキャンバスをメイン ページに追加します。
この 2 行のコードを実行するのにそれほど時間はかかりませんが、すべての形状が画面に表示されるまでには時間がかかり、UI はしばらく応答しなくなります。
WPF では、次のようにしてビジュアル ツリーのレンダリング時間をテストできます。
このように、ストップウォッチはロジック ツリーが作成された後に開始され、ビジュアル ツリーがレンダリング (ロード) された後に停止します。
しかし、Silverlight には DispatcherPriority がありません。
ありがとう
silverlight - ビジュアル ツリーから削除してルート データコンテキストをクリアすると、ツリーのさらに下のバインディングが残ります
[Silverlight] ビジュアル ツリー (Grid.Children.Clear()) から削除する大きなビジュアル オブジェクト ツリーがあります。ルートの DataContext を削除すると null になりますが、ツリーのさらに下にあるバインディングは次のようになります。
以前にバインドされていたオブジェクトにバインドされたままです。DataContext が null になると、バインディングがクリアされると考える人もいるでしょう。このようにグリッドの子をクリアするのは間違っていますか? 他に何が原因でしょうか?
silverlight - 依存関係プロパティを使用して、ユーザーコントロール内のコントロールを置き換えます
私は自分の問題を説明するために簡単なプロジェクトを作成しました。ボタンと長方形を格納するユーザーコントロール(「ButtonPod」)があります。
このユーザーコントロールをアプリケーション全体で使用したいのですが、途中でボタンを変更する必要があります。Buttonのすべてのプロパティを制御する必要があるため、「ButtonText」や「ButtonSize」などのDependencyPropertiesを公開するだけではなく、コントロールを使用するたびにButton全体を定義したいと思います。そこで、次のように依存関係プロパティ('CenterButton')を設定します。
次に、ユーザーコントロール内のMainPage.xamlで「CenterButton」を定義してみます。
しかし、アプリをロードすると、「古いボタンの内容」というボタンだけが表示されます。ボタンが置き換えられないのはなぜですか?ステップスルーすると、DependencyPropertyがヒットし、「ButtonOnPage」プロパティが設定されていることがわかりますが、ビジュアルツリーは更新されません。何か案は?
c# - XAML で HierarchicalDataTemplate に親の ItemsHost を使用するにはどうすればよいですか?
Panel
(特に自作の)に表示したいツリーまたはメニューのようなデータ構造がありますPolarPanel
が、すべての項目は同じパネルの VisualChildren である必要があります。
を定義する場合HierarchicalDataTemplate
、 を作成しItemsControls
て として指定する必要がありますIsItemsHost
か、それともここで間違っていますか? 親の ItemsHost を何らかの方法で参照できますか?
(私の最初の回避策はGetAllTheChildren
、SelectedChild のすべての子とすべての子を再帰的に返すプロパティをルート ノードに配置することでした。これは ObservableCollection とは簡単に連携しませんGetAllTheChildren
。必要以上のアイテムをリロードします)。
アイテムのビューを作成して同じ親に描画することにより、コード ビハインドでそれを実行できることはわかっていますが、WPF の間接的な自動魔法の方法を探しています。
編集:私は現在、すべてItemControls / Panels
が互いの上に描画される改善された回避策を使用しています。これにより、階層的な側面が保持されるため、上記 (GetAllTheChildren を使用) よりもはるかに優れたソリューションになります。しかし、それはまだ私の質問に答えていません...
グラフィカルに表示すると、次のよう
になります。階層要素を同じスペースに配置する必要があることに注意してください。
これに対するクリーンでシンプルな解決策はありますか?
silverlight - VisualTreeからChildWindowを削除し、元に戻してFullScreenを実現できますか?
ChildWindowであるポップアップがあります。そのポップアップの中に、MediaElementとビデオを制御するためのいくつかのボタンを持つUserControl(MediaPreviewView)があります。私の要件では、フルスクリーンボタンが必要であり、ユーザーがボタンをクリックするとビデオがフルスクリーンで表示されると記載されています。
私はMVVMを使用しているので、MVVMLightのメッセージングでこれを試すことにしました。ベースビューにメッセージを送信しています。そのビューのコードビハインド内に、グリッドを表示しています(非表示で、XAMLの下部にあり、zindexが高くなっています)。メッセージにMediaPreviewControlが含まれていて、Grid.Children.Add(をコントロールに設定しています。複数のことを試しましたが、ChildWindowを非表示にすることができますが、ボタンが機能しません。ChildWindowのようです。幅と高さが0であったとしても、ボタンの上にあります。より良いMediaPreviewViewをフルスクリーンにするための実行可能なアプローチ?
silverlight - ページごとに Silverlight UserControl のインスタンスを 1 つしか持てないのはなぜですか?
かなり不自由ですがUserControl
、SilverlightPage
に 2 つ追加しようとしましたが、同じコントロール名がビジュアル ツリーに 2 回使用されていることを (徹底的に掘り下げて) 通知する例外が発生しました。内部のコントロールにUserControl
は名前が付けられているため、一度に に含めることができるのは 1 つだけUserControl
ですPage
。これは本当ですか、それとも私は何かに気づいていませんか? マイクロソフトは本当にコードの再利用をあきらめたのでしょうか? これは非常に不自由です。
編集
ここに来る人のために、私はこれを System.Resources.MissingManifestResourceException 例外として取得していました。ビジュアル ツリー内のあいまいな名前が問題であることが判明するまで、しばらく時間がかかりました。うまくいけば、これはあなたを助けます。以下は完全な例外テキストです。
さらなる編集
ここに私のXAMLがあります:
そして、これが私のユーザー コントロールの XAML です。