問題タブ [adorner]
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.
c# - 設計時にプロパティを変更しても、Expression Blend 4 で XAML が更新されない
私は WPF のカスタム パネルに取り組んでおり、設計時のコードで問題が発生しました。問題を要約すると、設計時にコードを実行していて、そのコードがオブジェクト (パネルまたはパネルの子) のプロパティを変更すると、デザイナーで適切な変更が表示されますが、XAMLウィンドウを構成するものであり、何も更新されません。
例:
新しい WPF アプリケーションを作成してそのクラスをドロップすると、次の XAML でウィンドウが作成されます。
次にパネルの幅を変更すると (デザイナーで幅ハンドルをドラッグするか、プロパティ エディターで幅プロパティを変更して)、内側の四角形がデザイン サーフェイスで正しく更新されます。ただし、XAML を見ると、パネルの幅のみが更新され、四角形の幅は変更されません。パネルの幅を変更した後にプロジェクトをビルドすると、四角形は XAML で定義された値に戻ります:(
だから私はこれに対する解決策を求めてインターネットを精査するのにかなりの時間を費やしました、そして私が集めたものから、これはデザイナーがソース(XAML)、ビュー(デザイナーの実際のもの)の概念を持っているためです' で遊んでいる) とインスタンス(ModelItem クラスで定義されたオブジェクトのメモリ内インスタンス化)。私が収集したものから XAML を更新するために変更する必要があるのはインスタンスです。ただし、ModelInstance を入手することはできませんでした。
この投稿は、次のようなことを試す方向に私を導きました:
ただし、これはBlendをクラッシュさせるだけです...デバッガーでこのコードを調べたところ、クラッシュがnullRefferenceExceptionであることがわかりますが、何がnullかは不明です。これは modelTreeManager のルート プロパティだと思いますが、そうであれば、それを正しく設定する方法がわかりません。
だから私が達成しようとしていることは十分に単純に思えます。設計時に何かのプロパティを変更し、その変更を XAML にシリアル化します...おそらくこれは、デザイナーの項目の ModelItem バッカーを変更することで処理されますが、これを達成する方法に関するドキュメントは見つかりません.
さらに読む
と、私の例がレイアウトを変更していることに気付きました。これを達成する方法は他にもあります (レイアウト システム (arrangeOverride と measureOverride) を使用するなど) ですが、このアプローチでは必要な種類のコントロールが得られません。
また、装飾ツリーを鳴らして、UI のないカスタム装飾を作成しましたが、パネルの onPropertyChanged イベントをフックし、子の幅を変更しました。装飾者は ModelItem を手に入れることができるため、これは実際に機能しますが、限られた方法でしか機能しません。adorner ルートでは、メソッドは Cider (visual studio 2010) では完全に機能しますが、Blend では半分しか機能しません。Blend では、プロパティ エディタでパネルの幅が変更されると、子が更新されます。ただし、デザイン サーフェイスの幅ハンドルがブレンドでドラッグされた場合、子は更新されません (ビジュアル スタジオでは、デザイン サーフェイス ハンドルが使用されると子は更新されます)。
adornerのコードははるかに複雑ですが、チュートリアル: デザイン時の Adorner の作成(MSDN を検索してください。リンクは 1 つしか投稿できません) に従います。 Design.dll)。この不透明度スライダーは、Cider では (ドラッグすると) リアルタイムで更新されますが、Blend ではマウスを離したときにのみ更新されることに注意してください。誰かが興味を持っている場合は、これが私の装飾者のコードです。
c# - Adorner からのデータへのアクセス
私は C# と WPF で 2D グラフィックス ツールをAdorners
作成Shapes
していCanvas
ます。
シェイプが「選択された」と見なされたときに、アドナーが強調表示されるようにしたいと思います。これは、現在使用MouseDown
しているMouseUp
イベントです。
ただし、ユーザーは複数の図形を選択できるため、すべての図形が両方のマウス イベントを受け取るわけではありません。
選択した図形を保持する図面を管理するクラスがありList
ます。装飾者にこのデータへのアクセスを許可して、装飾された要素が選択されているかどうかを確認できるようにする最善の方法は何ですか?
私が考えたいくつかのこと:
- グローバル
List
化 - 悪い考え - 「選択された」プロパティを追加するために各形状をサブクラス化する - クラス内の形状へのすべての参照を変更する必要があります
wpf - WPF コントロールは移動しますが、その Adorner - ではありません:"/
テキストを追加する必要があったため、WPF line 要素に装飾を作成しました。
現在、この線が移動されても、装飾は自動的に線に「追従」しません。実際、それ自体は更新されません。
ここで、黒い曲線はコントロール ドローイングで、赤い「120 m」は装飾的なものです。
いくつかのコード
wpf - 装飾された要素の装飾とイベント
アドナーを使用して配列とその行の中央にテキストを表示するカスタム ライン シェイプがあります。
問題は、装飾された要素が装飾された要素とは独立して動作し、イベントをそれに「転送」しないことです。次のコードでは、装飾要素を装飾要素 ( ) に手動で再リンクする必要ta.MouseLeftButtonDown += Adorner_MouseLeftButtonDown;
がありますが、残念ながらこれでも機能しません。 ?
wpf - コントロールと同じレイヤーに検証エラーを表示する
Validationクラスを使用しているときに、無効な値を持つコントロールと同じレイヤーに検証エラーを(Validation.Errors添付プロパティを使用して)表示する方法はありますか?
私が欲しいのは、無効な値でコントロールの下にエラーを表示することです。ただし、エラーテキストは他のコントロールと重ならないようにする必要があるため、エラーテキストはコントロールと同じレイヤーにある必要がありますか?
よろしく、ジェスパー
.net - WPF に ContextMenuChanging(ed) イベントはありません
私はカスタムシェイプを持っています - MyShape
- (コントロールかもしれませんが、問題ではありません)。
MyShape
装飾者 - を持っていTextAdorner
ます。
はTextAdorner
同じ ContextMenu を持つ必要がありますMyShape
(同じ一意のオブジェクトを表すため)。
MyShape の CustomMenu は、いくつかの条件でコード内で変更されます。MyShape
そのため、CustomMenu が変更されて装飾の ContextMenu も更新される瞬間を検出する必要があります。
ただし、イベントはありませContextMenuChanging
ん。ContextMenuChanged
このコードを最初の ContemxtMenu の割り当てに使用しますが、装飾された要素がコンテキスト メニューを変更したときに、それらを同期する方法がわかりません。
この場合、どのように進めればよいでしょうか?
c# - WPF Adorner を表示する方法
MoveAdorner をいつ、どのようにアクティブ化/可視化するかについて少し苦労しています。
私は次のことを試みますが、成功しません: 装飾される要素で、GotFocus イベントに Adorner を追加します。それだけでは不十分なので、InvalidateVisual() への呼び出しを追加しました。しかし、何も起こりません。それらのアドナーを可視化する方法についてのヒントはありますか?
明確化のために: 装飾された要素は、カスタム ItemsControl の派生 Panel 内に配置される Control です。
は、コントロールの上部と下部の行にある 2 つのボックスから派生し、単純に描画しますMoveAdorner
。Adorner
よろしく
wpf - Wpf Adorner がインタラクションに応答しない
Webで画像をポップアップするために見つけることができるものと同様に、wpfでオーバーレイを作成しようとしています(背景が暗くなります)。アプリケーションの複数の部分で、さまざまな種類のコンテンツで再利用できるようにしたいと考えています。
これは、装飾クラスのコンストラクターの一時的なコードです (試してみてください)。
(もちろん) クラスに加えて、装飾された要素、GetVisualChild、および VisualChildCount の正しいサイズを装飾者に与えるために、MeasureOverride と ArrangeOverride の ovverride があります。
ここでの問題は、装飾が正しく表示されますが、装飾された要素にイベントや動作が適用されないことです。例えば:
ここにボタンが表示されていますが、ボタンをクリックすることはできず、ボタンのマウスオーバーに対する効果は適用されません。私はまだ問題を理解できません。
wpf - データテンプレートの外で、DataTemplateアイテムに装飾を追加できますか?
基本的に、ItemsControl内のアイテムを定義するDataTemplateがあり、クリックされたときにアイテムの上に吹き出しをポップしたいと思います。これまでのところ、私の試みは、私の装飾者がDataTemplateの内部に表示され、その上ではなく、そのDataTemplateの境界によってクリップされることにつながります。私はここで見つけることができる気の利いたアドナーコントロールを使用しています:http://www.codeproject.com/KB/WPF/adornedcontrol.aspx。
私のXAMLは次のようになります。
何かご意見は?私がやろうとしていることは、装飾者でも可能ですか?
wpf - 装飾層の UIElement をハイライトまたはアウトライン化する
どういうわけか、装飾層の特定のUIElement
(またはおそらく) を概説または強調表示できるようにしたいと考えています。Visual
装飾自体は問題ありません。のアウトラインを作成することの方が心配ですUIElement
。
私は提供する同様の効果を目指していOuterGlowBitmapEffect
ます。の外側の輪郭をたどりたいUIElement
。プロパティ(ほとんど常にnull)と他のいくつかのメソッドを調べることで多くのアプローチを試みましClip
たが、惨めに失敗しました。
今、これは確かに簡単に違いないと思っています。何かが足りないだけです。また、今回もGoogleは友達ではありませんでした。
編集: NET 3.5 は要件です