Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ToolTip ListBox, Обновление ToolTip при MouseMove() 
V
    Опции темы
Bladerender
Дата 24.1.2011, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



В общем такая задача. Есть ListBox с текстом. Задался вопросом, как показывать свой ToolTip, когда я брожу мышкой по тексту в ListBox. При этом ToolTip должен менять свою позицию и текст.

Подписался в ListBox на событие MouseMove() и пытаюсь там шаманить (в WinForms никогда проблем небыло)


Код

private void sourceCode_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
        {
            // То что хочу отображать
            System.Windows.Forms.ToolTip d = new ToolTip();

            //типа хочу получить окно IWin32Window
            IntPtr handle = new WindowInteropHelper(this).Handle;
            
             Point point = e.GetPosition(this.sourceCode));

            //показываю
            d.Show("bla-bla-bla", handle, point);
       
        }


собственно проблем 2. Второй и третий параметр неправильные. Точнее я не могу добыть из handle окно IWin32Window и не могу правильно достать point. Не то передаю. Что-то я или туплю или есть разительная разница WPF и WinForms в работе в таких ситуациях.
PM MAIL   Вверх
vikaz
Дата 25.1.2011, 06:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 869
Регистрация: 15.2.2006

Репутация: 1
Всего: 12



У меня сразу возникло несколько вопросов.
1. Почему Вы используете  System.Windows.Forms.ToolTip. Ведь у WPF есть свой ToolTip?
2. Почему Вы создаете новый объект ToolTip в MouseMove ? Ведь при перемещении мыши будет создавать шлейф из объектов ToolTip, при этом Вы их нигде не прячите.





--------------------
user posted image

Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ 
PM MAIL ICQ Skype   Вверх
Rohoss
Дата 25.1.2011, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: 4
Всего: 18



Так можно сделать с кода
Код

            ListBox lbx = new ListBox();
            ListBoxItem lbi = new ListBoxItem();
            TextBox txt = new TextBox();
            txt.Text = "My Text";
            lbi.ToolTip = txt;
            lbx.Add(lbi);


ToolTip, как говорил vikaz, нужно использовать из WPF. Но вы просто можете добавить в свойство ToolTip любой элемент управления WPF, если вас устраивает поведение тоолтипа по умолчанию, если же нет, то можно создать отдельно:
Код

            ListBox lbx = new ListBox();
            ListBoxItem lbi = new ListBoxItem();

            TextBox txt = new TextBox();
            txt.Text = "My Text";

            ToolTip tt = new System.Windows.Controls.ToolTip();
            tt.Content = txt;
            //Например, делаем так, чтобы наш тултип отбрасывал тень
            tt.HasDropShadow = true;
            
            lbi.ToolTip = tt;
            lbx.Add(lbi);


Это сообщение отредактировал(а) Rohoss - 25.1.2011, 13:28


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
Bladerender
Дата 25.1.2011, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



Я понимаю, что ToolTip можно подвязать к контролу. Но с обычной подвязкой проблема. Они когда хотят появляются. То появляются, то нет. Если мышку убрать с контрола и быстро вернуть обратно, то он уже не появится (зачастую). Вот потому я и хочу сделать его отображение вручную. 
Для того что бы List не путал ситуацию, пускай это будет обычный TextBox.  Я никогда не буду выводить мышку за пределы этого TextBox. Как мне этот тулТип постоянно отображать в той позиции, где у меня сейчас мышка на этом TextBox? В System.Windows.Controls.ToolTip  я вообще не нашел метод Show();
Шлейф из тултипов пускай не смущает. Как раз что-то типа шлейфа я и хочу сделать. Это уже мои заморочки. Мне хотя бы один показать, созданный мной и отображенный типа методом Show() в старом добром WinForms.
PM MAIL   Вверх
Rohoss
Дата 26.1.2011, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: 4
Всего: 18



Цитата(Bladerender @  25.1.2011,  23:55 Найти цитируемый пост)
 Они когда хотят появляются. То появляются, то нет. Если мышку убрать с контрола и быстро вернуть обратно, то он уже не появится (зачастую). Вот потому я и хочу сделать его отображение вручную. 


Bladerender, всё предусмотрено, используй класс ToolTipService

Код

            ListBox lbx = new ListBox();
            ListBoxItem lbi = new ListBoxItem();
            TextBox txt = new TextBox();
            txt.Text = "My Text";
            ToolTip tt = new System.Windows.Controls.ToolTip();
            tt.Content = txt;
            //Например, делаем так, чтобы наш тултип отбрасывал тень
            tt.HasDropShadow = true;
            
            //Продолжительность. Можно задать очень большое число, и тогда он будет видим всегда
            ToolTipService.SetShowDuration(tt, 10000000);
            //Через какое время тултип появится
            ToolTipService.SetInitialShowDelay(tt, 1000);

            lbi.ToolTip = tt;
            lbx.Add(lbi);


А ещё можно копнуть в сторону элемента Popup


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
Bladerender
Дата 26.1.2011, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 19.7.2007

Репутация: нет
Всего: нет



Заменил PopUp. Намного удобнее с ним работать. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.5008 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.