2013-07-25 2 views
0

У меня есть требование, когда мне нужно показать несколько кнопок рядом с выпадающим списком с помощью всплывающего окна или всплывающей подсказки. Например, добавление кнопок в Contnet всплывающей подсказки и отображение ее, когда пользователь наводит указатель мыши на выпадающий список.Показать всплывающую подсказку и получить фокус внутри всплывающей подсказки

Однако всплывающая подсказка остается открытой только тогда, когда указатель мыши находится над выпадающим списком. Поэтому, если я установлю всплывающую подсказку и добавлю к ней 2 кнопки, у пользователя не будет возможности щелкнуть по кнопкам внутри всплывающей подсказки, так как он должен отвести мышь от выпадающего списка, чтобы сделать это, всплывающая подсказка исчезает.

Есть ли способ держать всплывающую подсказку открытой в течение определенного времени, даже после того, как пользователь отталкивает свою мышь от выпадающего меню и в идеале держит всплывающую подсказку открытой, пока всплывающая подсказка получает фокус?

Код:

<Style x:Key="ToolTipStyle" TargetType="ToolTip"> 
      <Setter Property="Placement" Value="Right"/> 
     </Style> 

     <ToolTip x:Key="YourToolTip" Style="{StaticResource ToolTipStyle}"> 
     <StackPanel Background="Yellow" Orientation="Horizontal"> 
      <Button Content="Yes"/> 
      <Button Content="No"/> 
     </StackPanel> 
    </ToolTip> 

     <Style x:Key="DropDownStyle" TargetType="Controls:RadComboBox"> 
      <Setter Property="ToolTip" Value="{StaticResource YourToolTip}"/> 
      <Setter Property="ToolTipService.InitialShowDelay" Value="1000"/> 
      <Setter Property="ToolTipService.ShowDuration" Value="2000"/> 
      <Setter Property="ToolTipService.BetweenShowDelay" Value="10000"/> 
     </Style> 

<Controls:RadComboBox x:Name="mydropDown" Style="{StaticResource DropDownStyle}" ItemsSource="{StaticResource MyItems}" HorizontalAlignment="Center" VerticalAlignment="Center" Width="100"> 

     </Controls:RadComboBox> 

Примечание: Я использую .NET 3.5

EDIT: Контрольную всплывающее окно также хорошо, однако оригинальный вопрос остается, как нажать на кнопку внутри всплывающего окна, когда выпадающий объект больше не имеет фокуса (в предположении, что всплывающее окно IsOpen привязано к свойству IsMouseOver).

Спасибо, -Mike

+2

Почему бы не использовать System.Windows.Controls.Primitives.Popup класс? – Vladimir

+1

Если вы хотите, чтобы он сохранялся, когда мышь не была более длинной, посмотрите на дизайн, который не связан с IsMouseOver. – Paparazzi

ответ

2

Если эти кнопки должны появляться каждый раз, когда пользователь идет рядом выпадающий список, то, возможно, неправильная парадигма UI использовать плавающий всплывающие или всплывающую подсказку и кнопки, вероятно, следует добавить к панель инструментов, в которой находится поле со списком, или перемотать поле со списком и добавить кнопки (хотя это тоже будет неудобно).

Если вам нужно отобразить только кнопки, когда задан определенный набор значений в модели, рассмотрите возможность добавления крошечного холста в углу страницы или пользовательского элемента управления, чтобы его z-порядок был выше других элементов управления и рисования у вас есть подсказка инструмента с кнопками и т. д. Затем активируйте непрозрачность, вызванную значением на модели. Я думаю, когда непрозрачность равна 0, элемент не будет доступен для кликабельности и будет мешать другим элементам управления.

Вы можете обернуть все это в UserControl. Элементы на холсте не обрезаются, поэтому это работает. Таким образом я написал пользовательские элементы контекстного меню контекстного меню, искусственно введя холст в визуальное дерево во время выполнения (вроде AJAX).

В качестве альтернативы вы можете сделать подобную вещь, выполнив подкласс управления combobox, добавив свойства для привязки кнопок против и текста и т. Д., Добавив холст и т. Д. К новому настраиваемому шаблону и используя части и состояния, чтобы принести его в и вне поля зрения. Этот маршрут лучше всего, когда вам нужно повторно использовать этот элемент управления снова и снова.

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