在工具提示中显示工具提示并获得焦点

时间:2013-07-25 14:01:41

标签: c# wpf

我有一个要求,我需要使用弹出窗口或工具提示在下拉列表旁边显示一些按钮。例如,将按钮添加到工具提示的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属性),如何单击弹出窗口内的按钮。 / p>

谢谢, -Mike

1 个答案:

答案 0 :(得分:2)

如果每次用户靠近组合框时必须出现这些按钮,那么使用浮动弹出窗口或工具提示可能是错误的UI范例,并且按钮可能应该添加到组合框所在的工具栏中,或者重新组合组合框并添加按钮(虽然这也可能很笨重)。

如果您只需要在设置模型中的一组特定值时显示按钮,那么请考虑在页面的一角或用户控件中添加一个小画布,使其z顺序高于其他控件并绘制在那里拥有自己的工具提示,带有按钮等。然后设置由模型上的值触发的不透明度的动画。我认为当不透明度为0时,该项目将无法点击并妨碍其他控件。

您可以将所有内容包装在UserControl中。画布中的项目不会被剪裁,这就是为什么这样做的原因。我以这种方式编写了自定义弹出式上下文菜单控件,通过在运行时人为地将画布注入可视化树(类似于AJAX)。

或者,你可以通过继承组合框控件,添加属性来绑定按钮和文本等,将画布等添加到新的自定义模板并使用部件和状态将其带入并且不在视野范围内。当您需要反复重复使用此控件时,此路由最佳。

简而言之,我认为这很简单,听起来你可以通过重新考虑设计来节省工作量。