2016-08-15 2 views
0

У меня есть сложное приложение со многими полями и мало места для меток, которые точно описывают, какой должен быть вход данного элемента управления. Чтобы решить эту проблему, я попытался использовать всплывающую подсказку каждого элемента управления для описания элементов. Поскольку эти всплывающие подсказки мешают и исчезают после того, как пользователь начинает печатать, я выделил область своего приложения для отображения всплывающей подсказки сфокусированного элемента. Это работает довольно хорошо, за исключением более сложных элементов управления, которые содержат другие элементы управления, например. DatePicker, в качестве сфокусированного элемента будет PARTextBoxDatePicker. Вот минимальный пример, демонстрирующий эту проблему:Получите сфокусированное «управление контейнером» в WPF

<Window 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <StackPanel> 
    <TextBox ToolTip="TextBox ToolTip" /> 
    <DatePicker ToolTip="DatePicker ToolTip" /> 
    <Label Content="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=(FocusManager.FocusedElement).ToolTip}" /> 
    </StackPanel> 
</Window> 

Есть ли общий подход к решению этой проблемы фокусировки и отобразить всплывающую подсказку такой «составной» контроль (следовательно, для всех таких элементов управления, а не только DatePicker)?

ответ

0

Off верхней части моей головы, я бы для этого подхода:

  1. Создание Attached Property, который будет предоставлять описательный текст для управления
  2. ли прилагаемое класс свойство также принимать привязку к ваше свойство VM для описательного текста
  3. Связать свойство описательной текстовой видимости с меткой/текстовым блоком
  4. Прилагаемое свойство затем прослушивает, когда элемент управления получает фокус и только обновляет соответствующее привязку.

Таким образом, в XAML по крайней мере, это может выглядеть примерно так:

<TextBox local:DescriptiveText="This textbox takes some input" local:DescriptiveTarget="{Binding DescriptiveText} /> 
<Label Content="{Binding DescriptiveText} /> 
Смежные вопросы