WPF - событие Canvas_MouseLeftButtonDown - PullRequest
3 голосов
/ 04 декабря 2010

Привет

Я начал разработку с WPF вчера и столкнулся с некоторыми проблемами. Я пришел к выводу, что Canvas - это эквивалент панели в WinForms. Однако я столкнулся с некоторыми трудностями с событием «click». Событие MouseLeftButtonDown. Если это актуально или нет, это изображение и полотна находятся в пользовательском контроле

Image + 3 Canvasses

Приведенное выше изображение - в основном то, с чем я испытываю трудности. 3 изображения, которые вы видите, это одно изображение. Квадраты, которые вы видите, представляют собой разные холсты. В зависимости от того, по какому холсту щелкнули, я хочу, чтобы произошло что-то другое.

В настоящее время у меня есть следующий код:

<Grid>
    <Canvas Name="canvasTerran"  Height="27" Width="26" Margin="88,106,134,106" MouseLeftButtonDown="canvasTerran_MouseLeftButtonDown" />
    <Canvas Name="canvasZerg" Height="27" Width="26" Margin="117,107,105,107" MouseLeftButtonDown="canvasZerg_MouseLeftButtonDown" />
    <Canvas Name="canvasProtoss" Height="27" Margin="145,107,88,107" MouseLeftButtonDown="canvasProtoss_MouseLeftButtonDown" />
    <Image Name="imageRaces" Height="27" Width="73" Stretch="Fill" Source="pack://application:,,,/Images/Races/Races.png" />
</Grid>

Когда я запускаю приложение (пользовательский элемент управления находится в главном окне курса) и щелкаю там, где должны быть холсты, ничего не происходит. Событие, которое я пытаюсь запустить:

 private void canvasTerran_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            MessageBox.Show("lolterran", "lol");

            // image on main window
            // .Source = new BitmapImage(new Uri("pack://application:,,,/" + Constants.RACESPATH + "T.png"));
        }

Я действительно не вижу, что я делаю здесь неправильно, поэтому любые предложения будут приветствоваться. Как я уже сказал, я новичок в WPF, поэтому, если вы думаете, что есть лучший способ, чем я сейчас пытаюсь, пожалуйста, скажите об этом!

Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 04 декабря 2010

Проблема в том, что полотна прозрачны.Таким образом, все события не останавливаются на холсте, но они генерируются для его родительского элемента.

Если вы установите Background = White или Red, например, для холста, он должен получить MouseLeftButtonDown.

3 голосов
/ 04 декабря 2010

Ваше изображение скрывает холсты, поэтому в XAML объявляют холсты после того, как вы объявите изображение, поэтому в пользовательском интерфейсе они будут перед ним, и щелчок вступит в силу.

Совет.Фоновые цвета canvas, чтобы увидеть, как они отображаются в пользовательском интерфейсе.Когда вы сделаете это, вы увидите, что изображение скрывает их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...