Главная » WPF » ToolTip

0

В общем  случае  доступ  к всплывающей подсказке  (tool  tip)  дает  свойство

, имеющееся  у любого элемента управления:

<Button =’Click this button to do cool things!’> OK

</Button>

Есть  два  стандартных   способа  изменить   поведение  подсказок.  Во#первых, служба Service позволяет  настроить  большее число свойств. Ее достоин# ства в том, что создается  лишь один объект (это полезно, если требуется много подсказок  для разных  элементов  управления). В более сложных  случаях можно создать объект и ассоциировать его с конкретным элементом:

<!— Test.xaml —>

<Window … x:Class=’EssentialWPF.Test’ Title=’Tool Tips’ Service.InitialShowDelay=’0’ Service.ShowDuration=’500000’

<Window.>

< x:Name=’_theTip’ Placement=’RelativePoint’ VerticalOffset=’10’

/>

</Window.>

<UniformGrid Rows=’3’ Columns=’3’>

<Button Margin=’5’>1</Button>

<Button Margin=’5’>2</Button>

<Button Margin=’5’>3</Button>

<Button Margin=’5’>4</Button>

<Button Margin=’5’>5</Button>

<Button Margin=’5’>6</Button>

<Button Margin=’5’>7</Button>

<Button Margin=’5’>8</Button>

<Button Margin=’5’>9</Button>

</UniformGrid>

</Window>

// Test.xaml.cs

public partial class Test : Window {

public Test() { InitializeComponent();

this.MouseMove += Test_MouseMove;

}

void Test_MouseMove(object sender, MouseEventArgs e) {

// Ищется элемент, над которым находится мышь.

//

PointHitTestResult hit = VisualTreeHelper.HitTest(

this, e.GetPosition(this)) as PointHitTestResult;

if (hit != null && hit.VisualHit != null)

{

_theTip.Content = hit.VisualHit.ToString();

_theTip.PlacementRectangle =

new Rect(e.GetPosition(this), new Size(0, 0));

}

}

}

Рис. 3.36. Элемент в действии

Запустив эту программу (рис. 3.36), мы никогда не сможем попасть мышью в са# мо окно. Так как подразумеваемый по умолчанию  шаблон для элемента  Window включает рамку вокруг объекта ContentPresenter, служащего контейнером для со# держимого, система никогда не скажет, что щелчок мышью произошел  в самом ок# не11. То же самое справедливо и для кнопки Button: на элемент ButtonChrome и на текстовый  блок навести мышь можно, а на саму кнопка – нет. Это еще один довод в подтверждение того, что у элементов управления нет собственного отображения.

Конечно,   можно  создать  специальный  шаблон  для  элемента   управления

, придав ему желаемую форму и внешний вид (рис. 3.37).

11 На самом деле, в WPF вообще нет API для доступа к самым внешним элементам окна (полоса заго) ловка, кнопки свертывания и развертывания и т.д.). Чтобы изменить их (или получать от них собы) тия), нужно либо воспользоваться технологией вызова системных API (P/Invoke), либо отключить стандартный механизм изображения окна (WindowsStyle.None) и рисовать рамку самостоятельно.

Источник: К. Андерсон  Основы  Windows Presentation Foundation. Пер. с англ. А. Слинкина — М.: ДМК Пресс, 2008 — 432 с.: ил.

По теме:

  • Комментарии