いくつかの GUI コントロール要素があり、そのうちのいくつかはマウス操作 (MouseEnter、MouseLeave) で同じアクション (コード ビハインド関数呼び出し) を生成することになっています。
[編集]イベント ハンドラーでスタイルに関連しない機能をいくつか実行しています。
現在、各コントロールでイベント属性を使用しています。
<Button Name="Button" Content="Button 1"
MouseEnter="GeneralMouseEnter" MouseLeave="GeneralMouseLeave"
PreviewMouseDown="Button1_PreviewMouseDown" PreviewMouseUp="Button1_PreviewMouseUp" />
<Button Name="NotInteractingButton" Content="Button 2"
/><!-- this button has no MouseOver-effects -->
<ToggleButton Content="ToggleButton"
MouseEnter="GeneralMouseEnter" MouseLeave="GeneralMouseLeave" />
<!-- needs to use IsMouseDirectlyOver on the slider knob... -->
<Slider Name="HorizontalSlider"
MouseEnter="GeneralMouseEnter" MouseLeave="GeneralMouseLeave"
ValueChanged="Slider_ValueChanged" />
<Slider Name="VerticalSlider" Orientation="Vertical"
MouseEnter="GeneralMouseEnter" MouseLeave="GeneralMouseLeave"
ValueChanged="Slider_ValueChanged" />
この例の多くのコントロールは同じ 2 つの関数「GeneralMouseEnter」と「GeneralMouseLeave」を呼び出しているため、その動作をカプセル化するためにスタイルなどを定義できるようにしたいと思います。
[編集 - 説明]
これは後で一種のプラグインになる予定です。
(任意の GUI プログラムにコードと XAML ファイルを組み込み、各インタラクティブ コントロール要素にスタイルを設定します...)
ウェブ上で見つけたものによると、EventTriggers
次の例のように使用できます。
<Style.Triggers>
<EventTrigger RoutedEvent="Click">
<EventTrigger.Actions>
<BeginAction TargetName="SomeAction" />
</EventTrigger.Actions>
</EventTrigger>
</Style.Triggers>
ただし、アクション内で関数を呼び出すかどうか、またどのように呼び出すかはわかりません。
- 各コントロールに適用されるアクション + トリガーを含むスタイルを作成することで、この機能を実現できますか? どのようにすればよいですか?
- 1 つのコントロールに複数のスタイル (複数のインタラクション イベント用) を割り当てるにはどうすればよいですか?
- この動作を実現するよりクリーンな方法はあるでしょうか?
- [編集]
たとえば、GUI 内のすべてのスライダーをマウスで操作したい場合はどうすればよいでしょうか?
ベストアンサー1
マーティン、
EventSetter を使用して、スタイルから直接イベント ハンドラーを割り当てることができます。
<Style TargetType="{x:Type Button}">
<EventSetter Event="Click" Handler="SomeAction"/>
</Style>
@コリンE:
スタイルを使用してイベントの接続を実行するのが良いアイデアかどうかはわかりません。スタイルは、定義上、コントロールの視覚的な外観を定義します。
残念ながら、これは WPF スタイルに関する一般的で広範な誤解のようです。スタイルの名前は、あなたが言うように、単に外観を定義することを目的としていることを示唆していますが、実際にはそれ以上のものです。スタイルをより一般的には、コントロールに一連のプロパティを割り当てるためのショートカットとして捉えると役立ちます。