none
Не работает VisualBrush в ToolTip RRS feed

  • Вопрос

  • Есть программа с вкладками, в которых имеется некое содержимое и есть задача при наведении на вкладку отобразить миниатюрное окошко с ее содержимым. Наиболее логичным способом реализовать это, на мой взгляд, залить ToolTip вкладки кистью VisulBrush, которая копирует содержимое вкладки. Но, как оказалось ничего не вышло - ToolTip успешно заливается любой кистью, кроме VisulBrush, а VisulBrush успешно копирует содержимое вкладки в заливку любого другого элемента (Bordr, Button).

    Собственно вопрос: поддерживает ли ToolTip кисть VisulBrush и если нет, то как проще все реализовать поставленную задачу?

    Я уточняю - "как сделать проще всего?", так как сам знаю пару способов, но они требуют неких усилий, а вариант с ToolTip'ом был очень удобным и простым....

    • Перемещено Tagore Bandlamudi 2 октября 2010 г. 21:04 MSDN Forums consolidation (От:Разработка Windows-приложений)
    11 августа 2010 г. 7:03
    Отвечающий

Ответы

  • Чета у меня прямоты рук не хватает, в разметке сделать, но вот так тоже получается: 

    1. В TabItem'ы кидаешь грыды, в которых размещаешь, элементы;

    2. Пишешь примерно вот такую функцию:

        private ToolTip CreateToolTip(UIElement uie)
        {
          VisualBrush vb = new VisualBrush(uie);
          Rectangle r = new Rectangle();
          r.Width = 100;
          r.Height = 100;
          r.Fill = vb;
          r.SetValue(Grid.RowProperty, 1);
          
          Grid grd = new Grid();
          grd.RowDefinitions.Add(new RowDefinition());
          grd.Children.Add(r);
    
          ToolTip tp = new ToolTip();
          tp.Content = grd;
          tp.Width = 100;
          tp.Height = 100;
          return tp;
        }
    

    3. Где-нибудь, после InitializeComponent лепишь ToolTip'ы

          this.tabItem1.ToolTip = CreateToolTip(this.tab1Grid);
          this.tabItem2.ToolTip = CreateToolTip(this.tab2Grid);

    Соответсвенно, tabItem1, tabItem2 - это закладки, а tab1Grid и tab2Grid - это гриды с содержимым.

    Не знаю, на сколько это "проще всего", но работает и в ToolTipe содержимое отрисовывает.

     

    • Помечено в качестве ответа LXGDARKEditor 13 августа 2010 г. 9:30
    13 августа 2010 г. 8:07
    Модератор

Все ответы

  • Может мне стоило уточнить что речь идет о проекте WPF, а то тишина какая то ....
    13 августа 2010 г. 4:30
    Отвечающий
  • Чета у меня прямоты рук не хватает, в разметке сделать, но вот так тоже получается: 

    1. В TabItem'ы кидаешь грыды, в которых размещаешь, элементы;

    2. Пишешь примерно вот такую функцию:

        private ToolTip CreateToolTip(UIElement uie)
        {
          VisualBrush vb = new VisualBrush(uie);
          Rectangle r = new Rectangle();
          r.Width = 100;
          r.Height = 100;
          r.Fill = vb;
          r.SetValue(Grid.RowProperty, 1);
          
          Grid grd = new Grid();
          grd.RowDefinitions.Add(new RowDefinition());
          grd.Children.Add(r);
    
          ToolTip tp = new ToolTip();
          tp.Content = grd;
          tp.Width = 100;
          tp.Height = 100;
          return tp;
        }
    

    3. Где-нибудь, после InitializeComponent лепишь ToolTip'ы

          this.tabItem1.ToolTip = CreateToolTip(this.tab1Grid);
          this.tabItem2.ToolTip = CreateToolTip(this.tab2Grid);

    Соответсвенно, tabItem1, tabItem2 - это закладки, а tab1Grid и tab2Grid - это гриды с содержимым.

    Не знаю, на сколько это "проще всего", но работает и в ToolTipe содержимое отрисовывает.

     

    • Помечено в качестве ответа LXGDARKEditor 13 августа 2010 г. 9:30
    13 августа 2010 г. 8:07
    Модератор
  • На самом деле из кода все работает, а из разметки нет ((( С чем уж это связано я даже не знаю.

    Примечательно, что применение VisulBrush в качестве кисти заливки, как к самому ToolTip, так и к любому вложению (будь то Rectangle или Border) так же не работает, если это делать в разметке и отлично работает при создании в коде

    13 августа 2010 г. 9:33
    Отвечающий