問題タブ [eventsetter]
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# - ハイパーリンクにセッター プロパティが適用されないのはなぜですか?
ウィンドウ内のFontSize
すべての s に(たとえば) を設定したい。Hyperlink
これは私MainWindow
のXAML
コンテンツです:
スタイルを明示的に追加すると機能します...(つまりx:Key="HyperlinkStyle"
、Style
タグに追加Style="HyperlinkStyle"
し、に追加しますHyperlink
)
スタイルを自動的にすべての s に設定するにはどうすればよいHyperlink
ですか?
編集:
@keyboardP、@Anatoliy、@kmatyaszek - 大丈夫です... 皆さんに感謝します! ようやくStyle
タグを<RichTextBox.Resources>
プロパティに移動しました。
wpf - WPF で ListBoxItem をダブルクリックしたときに応答する方法はありますか?
項目の ListBox を持つ単純な WPF アプリケーションがあります。この例を簡単にするために、文字列のリストにしましたが、実際には複雑な型のリストになります。リストボックス内のアイテム自体がダブルクリックされたときに、それに応答したい。どうやら、アイテム自体の ListBox に直接のダブルクリック イベントはありません。(リストボックス自体ではなく) ダブルクリックされた ListBox 内の項目に応答する簡単な方法はありますか?
ここに私のxamlがあります:
c# - Style の EventSetter が別のイベント ハンドラーと並行して実行される可能性はありますか?
WPFStyle
で forを定義しました。Button
そのスタイルでは、ボタンをクリックしたときにボタンの背景を変更したいと考えています。例えば:
およびコードビハインドで:
したがって、これは複数Button
の に適用される一般的なスタイルであり、それぞれが異なる仕事を実行します。上記のイベント ハンドラーは、ボタンがクリックされたときに各ボタンに指定されている他のイベント ハンドラーと共に実行される可能性はありますか?
Click
このスタイルを使用するボタンのハンドラを指定した場合、それは をオーバーライドしますか、EventSetter
それともEventSetter
のほうが優先されますか?
wpf - WPF baml バグ: 静的リソースの EventSetter が 2 回設定され、2 回目は null に設定される
EventSetter を含む SetterBase オブジェクトのコレクションを xaml に格納しようとすると、xaml ローダーがエラーをスローします。
根本的な原因は、xaml ローダーが PresentationFramework.dll!System.Windows.EventSetters.Event を 2 回設定しようとすることです。1 回目は正しい値 (ButtonBase.Click RoutedEvent) に設定されますが、2 回目は null に設定され、例外がスローされます。私の添付プロパティのコールバックは関係ありません。
EventSetter にイベントを 2 回追加しようとするのはなぜですか? 2 回目は null になるのはなぜですか? 使用されているctorがデフォルトのものであることを確認したので、EventSeetterは異常な方法でコレクションとやり取りしていないので、そうではありません。実際の理由は、イベント (Event と EventHandler) の 2 つの部分からなる構造を解析するという課題を無効にする wpf のバグです。
意見
コード ビハインドは、InitializeComponent とイベント ハンドラーのスタブのみです。このエラーは、InitializeComponent 中に発生します。
行動
エラー
デバッグ
System.Windows.EventSetter.Event に関数ブレークポイントを設定し、セッターに渡された値をログに記録するアクションを設定しました...
次に、アプリを実行して出力ウィンドウを確認すると、セッターが 2 回ヒットしたことがわかります。1 回目は正しい値で、2 回目は値が null です...
実際の例は、EventSetterNull-SO-41604891-2670182 というプロジェクトのこの GitHub リポジトリのソリューションにあります。
バムル
XamlNodeList の Index メンバーに BP を設定することで、SetterBaseCollection xaml オブジェクトに関連付けられた xaml シンボルをキャッチできます...
不具合?
まず、idx [20] で始まる追加の Event メンバーがあり、このメンバーは実際には System.NullReferenceException です。
これは XamlObjectWriter に渡され、次に EventSetter プロパティに渡されます。これがエラーの原因です。
その後、baml は期待どおりに実行され、ハンドラー メンバーが表示され、メンバーとオブジェクトが適切に終了されます。
結論
問題は xaml から baml への変換にあるため、バグだと思います。回避可能なエッジケースではありますが。
回避策
スタイルでイベントを設定しようとする代わりに、親オブジェクトで添付プロパティを使用します。たとえば、StackPanel の ButtonBase.Click="StyleClick" は、私が最初にやろうとしていたすべてのクリックに動作を提供します。プロパティ セッターのコレクションは、引き続き静的リソースに設定し、添付されたプロパティ ベースの動作によって使用できます。
根本原因のさらなる研究
問題は、イベント プロパティにイベントとハンドラーの 2 つの要素があることです。Baml2006Readerが baml 内のオブジェクトを解析するとき、オブジェクト メンバーを忠実に解釈するために正しい状態にあることを保証するために、その構造を考慮する必要があります。これを行うために、 ReadObjectの while ループから駆動されるProcess_OneBamlRecordというステート マシンがあります。このメソッドは、次の xamlNodeType をデコードし、適切なメソッドを呼び出して解析し、オブジェクトとして書き込みます。これらのメソッドの 1 つは Process_Property と呼ばれ、baml で複雑なイベントを処理するために特別なロジックが組み込まれています。
問題は、イベントが baml に Process_PropertyWithConverter として記録されている場合、このメソッドはイベントの特別な要件を認識せず、すべてを詰め込むことです。イベント ハンドラーには、プロパティ タグがプレフィックスとして付けられます (イベント パーサーは、このサブ構造に対して同じ構文を再帰的に使用することを意図していた可能性が最も高い)。EndMember、StartMember の状態変更がないため、ハンドラー サブプロパティはによって解釈されます。 Event プロパティとしての ReadObject。また、作成中のイベント セッター オブジェクトは、Event プロパティが既に設定されているため、エラーをスローします。
wpf - datagrid コンボボックスの selectionchanged のイベントを設定するには?
こんにちは、次のようにデータグリッドをモジュールにバインドする wpf プロジェクトがあります。
これはうまくいきます。次に、コンボボックスにイベントを設定するなど、いくつかの機能を追加したいと思いますSelectionChanged
。そこで、xaml
ファイルを次のように変更しました。
そして、次のようにバックエンドに関数を追加します。
error: "The Application is in break mode."
しかし、これにより、コンボボックスのセルを変更したときにプロジェクトが崩壊します。では、何が問題になるのでしょうか?前もって感謝します!