@DotRun

Почему не срабатывают маршрутизируемые события?

Подскажите, почему при клике на эллипсе outerEllipse после обработки события PreviewMouseDown не срабатывают остальные обработчики ? Но если убрать MessageBox.Show(), то они срабатывают:

<StackPanel>
        <Button Name="btnClickMe" Height="75" Width = "250" Click ="btnClickMe_Clicked" >
            <StackPanel Orientation ="Horizontal">
                <Label Height="50" FontSize ="20">Fancy Button!</Label>
                <Canvas Height ="50" Width ="100" >
                    <Ellipse Name = "outerEllipse" Fill ="Green" Height ="25" Width ="50" Cursor="Hand" Canvas.Left="25" Canvas.Top="12" MouseDown="outerEllipse_MouseDown" PreviewMouseDown="outerEllipse_PreviewMouseDown"/>
                    <Ellipse Name = "innerEllipse" Fill ="Yellow" Height = "15" Width ="36" Canvas.Top="17" Canvas.Left="32"/>
                </Canvas>
            </StackPanel>
        </Button>
    </StackPanel>


public partial class WindowsApplication : Window
    {
        string data = string.Empty;

        public WindowsApplication()
        {
            InitializeComponent();
        }
        private void btnClickMe_Clicked(object sender, RoutedEventArgs e)
        {
            data += "Button Clicked\n";
            MessageBox.Show(data);
            data = string.Empty;
        }
        private void outerEllipse_MouseDown(object sender, MouseButtonEventArgs e)
        {
            data += "Outer MouseDown\n";
            MessageBox.Show(data);           
        }
        private void outerEllipse_PreviewMouseDown(object sender, MouseButtonEventArgs e)
        {
            data += "Outer PreviewMouseDown\n";
            MessageBox.Show(data);
        }
    }
  • Вопрос задан
  • 91 просмотр
Пригласить эксперта
Ответы на вопрос 1
@DotRun Автор вопроса
Нашел ответ:
Изменение фокуса на окно сообщения отменяет событие MouseDown.

The focus change to the message box cancels the mouse down event so it doesn't matter whether it is handled or not. Since you know which item the user was trying to select before you displayed the message box, simply select that item programmatically if the user presses YES.
© Rick Sladkey
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы