WPF アプリケーションで、画像タイプの画像が「n」個あり、いずれかの画像 (画像タイプ) をクリックすると、その表示が崩れるとします。これを行う通常の方法は、すべての画像の「クリック」イベントごとに折りたたむコードを記述することです。
画像タイプの UIelement(picture) がクリックされるたびに、その特定の要素(picture) が折りたたまれることをアプリケーションが理解できるようにする別の方法はありますか?
コードを減らしたいのですが、どうすればこれを達成できますか?
質問する
1669 次
3 に答える
3
これらがルーティング イベントであるという事実を利用して、親要素に単一のハンドラーを設定できます。
これにより、1 つのイベント ハンドラで子コントロールのすべてのイベントを処理できます。イベント引数のOriginalSource
プロパティは、クリックされた UIElement を提供します (たとえば、サブスクライブしたUIElement.MouseLeftButtonDown
場合、または同様の「共有」イベント)。
これを行うには、XAML でコンテナーに次を追加します。
<Grid UIElement.MouseLeftButtonDown="CommonClickHandler">
<!-- Your elements here -->
次に、コード ビハインドで次のようにします。
private void CommonClickHandler(object sender, MouseButtonEventArgs e)
{
Image picture = e.OriginalSource as Image; //OriginalSource is the original element
if (picture != null)
picture.Visibility = Visibility.Collapsed;
}
于 2013-08-02T19:45:01.523 に答える
2
このようにEventManager.RegisterClassHandlerを使用してグローバルハンドラーを追加できます-
public MainWindow()
{
InitializeComponent();
EventManager.RegisterClassHandler(typeof(Image), Image.MouseDownEvent,
new RoutedEventHandler(OnMouseDown));
}
private void OnMouseDown(object sender, RoutedEventArgs e)
{
(sender as Image).Visibility = System.Windows.Visibility.Collapsed;
}
于 2013-08-02T19:52:21.723 に答える
1
複数のイベント ハンドラーで使用しているメソッドを登録し、パラメーターを使用して特定のコントロールにアクセスし、使用しているObject sender
コントロールの型にキャストすることができます。
myControl.Click += new EventHandler(myGenericClickMethod);
public void myGenericClickMethod(Object sender, EventArgs e)
{
Image myImage = (Image) sender;
myImage..Visibility = System.Windows.Visibility.Collapsed;
}
于 2013-08-02T19:43:28.607 に答える