2013-07-25 64 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

編輯:一個彈出的控制也很好,但原來的問題仍然存在,如何單擊彈出裏面的按鈕,當下拉菜單不再有焦點時(假設彈出窗口的IsOpen綁定到IsMouseOver屬性)。

感謝, -Mike

+2

爲什麼不使用System.Windows.Controls.Primitives.Popup類? – Vladimir

+1

如果您希望在鼠標不再結束時繼續運行,請查看未綁定到IsMouseOver的設計。 – Paparazzi

回答

2

如果這些按鈕必須出現在每個用戶上的組合框附近時,那麼它可能是錯誤的UI範式使用浮動彈出提示或和按鈕也許應該被添加到工具欄上的組合框,或者重新設定組合框並添加按鈕(儘管這也可能笨重)。

如果您只需在模型中設置了一組特定值時顯示按鈕,請考慮在頁面或用戶控件的角落中添加一個小畫布,以便其Z軸順序高於其他控件並繪製您在那裏擁有工具提示,並帶有按鈕等。然後爲由模型上的值觸發的不透明度製作動畫。我認爲當不透明度爲0時,該項目將不會被點擊並妨礙其他控件。

您可以將所有這些包裝在UserControl中。畫布中的項目不會被剪裁,這就是爲什麼它可以工作。我用這種方式編寫了自定義的彈出式上下文菜單控件,通過在運行時人爲地將畫布注入到可視化樹中(有點像AJAX)。

或者,您可以通過繼承組合框控件,添加屬性來綁定按鈕和文本等,將畫布等添加到新的自定義模板並使用部件和狀態來實現它進出視野。當您需要反覆重複使用此控件時,此路線是最佳選擇。

總之,我不認爲它很容易,它聽起來像你可以通過重新考慮設計來節省工作量。