Гость
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / нажимаем несколько чекбоксов за 1 клик / 2 сообщений из 2, страница 1 из 1
07.10.2013, 08:13
    #38418453
4eburawka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нажимаем несколько чекбоксов за 1 клик
Привет, это опять я :/
Задача: Есть N ToggleButton'ов. Если кнопка в которую ткнул включена, мы ее выключаем И не отпуская нажатие тащим мышку по другим кнопкам. В итоге все кнопки, по каким прошелся, должны выключиться . И наоборот, если я первую включаю, то все по каким провел мышкой, так же включаются.

Проблема: при нажатии на кнопку, только эта кнопка получает ивенты от мышки, в итоге сколько не таскай ее по экрану, другие кнопки никак не реагируют. А вот если ткнуть сначала не в кнопку и потом по кнопках провести, то все хорошо. Пытался освободить мышку с помощью.
Код: c#
1.
Mouse.Capture(null);


и с помощью
Код: c#
1.
ReleaseMouseCapture();


Не помогло, соседние кнопки все равно не ловили ивенты :(

Попытался сделать через
Код: c#
1.
button.ClickMode = ClickMode.Hover;


Попадаю в ивент Button_Click, но вот только как сделать что бы не менялся статус кнопки, пока не нажата мышка я не понимаю.

Поможите люди добрые советом.
...
Рейтинг: 0 / 0
08.10.2013, 04:37
    #38419616
4eburawka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
нажимаем несколько чекбоксов за 1 клик
После долгих танцев с бубном, с горем пополам сделал. Все работает хорошо, но я не понимаю почему OnClick пришлось делать protected override, а PreviewMouseDown цеплять через += new в инициализаторе? Как вообще правильно было сделать?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
    ...
    button.ClickMode = ClickMode.Hover;
    ...

    public class ChartButton : ToggleButton
    {
        public static Boolean toggleStatusOnClick;

        private void OnPreviewMouseDown(object sender, MouseEventArgs e)
        {
            toggleStatusOnClick = (Boolean)this.IsChecked;
            OnClick();
        }

        protected override void OnClick()
        {
            if (this.IsChecked == toggleStatusOnClick)
            {
                if (Mouse.LeftButton == MouseButtonState.Pressed)
                {
                    base.OnClick();
                }
                ...
            }
        }
        private void InitializeComponent()
        {
            this.PreviewMouseDown += new MouseButtonEventHandler(this.OnPreviewMouseDown);
        }
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / нажимаем несколько чекбоксов за 1 клик / 2 сообщений из 2, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]