スタイルセッターにブレンド動作を追加
ボタンのカスタム ミックスイン動作を作成する場合、アプリケーション内のすべてのボタンに対してそれを設定するのは困難な場合があります。インライン XAML を使用すると、特定の動作を 1 つのオブジェクトに関連付けることができます。ただし、このアプローチでは、複数のターゲットに適用できるスタイルを通じて動作を設定する場合に制限が発生します。
スタイルの動作設定の問題
主な問題は、動作とトリガーが本質的に特定のオブジェクトに関連付けられていることです。インライン XAML を使用する場合、XAML はこの 1 対 1 の関係を強制します。ただし、スタイルは複数のターゲットで再利用できるため、スタイルで動作を定義するとこの原則が崩れます。これにより、基礎となる動作クラスの例外が発生します。
さらに、インタラクションに関連する「動作」プロパティへのアクセスが制限されているため、スタイルを介して値を設定できません。
解決策: カスタム トリガーと動作コレクションを使用します
これらの課題に対処するために、開発者はカスタム動作とトリガー コレクション クラスを利用したソリューションを設計しました。これらのクラスを使用すると、スタイルの動作を作成および変更できます。
このソリューションの背後にある重要な原則は以下に焦点を当てています:
実装例
次のコード例は、このソリューションを実装する方法を示しています。
<code class="language-xml"><grid> <grid.resources> <triggers x:key="debugTriggers" x:shared="False"> <eventtrigger eventname="MouseLeftButtonDown"> <debugaction message="DataContext: {0}" messageparameter="{Binding}" /> <debugaction message="ElementName: {0}" messageparameter="{Binding Text, ElementName=textBlock2}" /> <debugaction message="Mentor: {0}" messageparameter="{Binding Text, RelativeSource={RelativeSource AncestorType={x:Type FrameworkElement}}}" /> </eventtrigger> </triggers> <Setter Property="local:SupplementaryInteraction.Triggers" Value="{StaticResource debugTriggers}" /> </grid.resources> <stackpanel datacontext="{StaticResource stringResource1}"> <textblock name="textBlock1" style="{StaticResource debugBehavior}" text="textBlock1" /> <textblock name="textBlock2" style="{StaticResource debugBehavior}" text="textBlock2" /> <textblock name="textBlock3" style="{StaticResource debugBehavior}" text="textBlock3" /> </stackpanel> </grid></code>
この例では、正しいデータ バインディングとメッセージ生成を維持しながら、スタイル内の複数のテキスト ブロックにカスタムの動作とトリガーを適用する方法を示します。
以上がXAML のスタイルを使用してブレンド動作を複数のオブジェクトに効果的に追加する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。