0

MouseUpイベントの動的な処理に問題があります。問題のあるテストコード:

WPF:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>

        <Button x:Name="Button1" Content="Button1" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click_1"/>
        <Button x:Name="Button2" Content="Button2" HorizontalAlignment="Left" Margin="10,37,0,0" VerticalAlignment="Top" Width="75"/>

    </Grid>
</Window>

C#の背後:

using System.Windows;
using System.Windows.Input;

namespace WpfApplication1
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            Button2.MouseLeftButtonUp += something;
        }

        private void something(object sender, MouseEventArgs e)
        {
            MessageBox.Show("TEST");
            Button2.MouseLeftButtonUp -= something;
        }
    }
}

ここで、MessageBox「TEST」というテキストが付いたを、クリックした後、クリックした後、初めて表示するようにButton2しますButton1。表示されません。同じコードClickが代わりにイベントで機能しMouseUpますが、マウスの位置を取得する必要があります。最初の関数が起動することを確認しましたが、2番目の関数は何を試しても問題ありません。ヘルプ?

4

1 に答える 1

3

ButtonBaseの備考セクションを参照してください。クリック:

ButtonBaseは、MouseLeftButtonDownイベントをOnMouseLeftButtonDownメソッドで処理されるものとしてマークし、Clickイベントを発生させます。したがって、ButtonBaseから継承するコントロールに対してOnMouseLeftButtonDownイベントが発生することはありません。代わりに、イベントハンドラーをPreviewMouseLeftButtonDownイベントにアタッチするか、handledEventsTooをtrueに設定してAddHandler(RoutedEvent、Delegate、Boolean)を呼び出します。

は内部で処理されるため、イベントMouseLeftButtonDownも発生しません 。MouseLeftButtonUpただし、代わりにPreviewMouseLeftButtonUpイベントを使用できます。

于 2012-12-21T09:49:05.620 に答える