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 属性)。

谢谢,-迈克

4

1 回答 1

2

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

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

您可以将所有内容包装在 UserControl 中。画布中的项目不会被剪裁,这就是它起作用的原因。我以这种方式编写了自定义弹出上下文菜单控件,方法是在运行时将画布人工注入可视化树(有点像 AJAX)。

或者,您可以通过子类化组合框控件、添加属性以绑定按钮和文本等、将画布等添加到新的自定义模板并使用部件和状态将其引入和取出来做类似的事情看法。当您需要反复重用此控件时,此路线是最佳选择。

简而言之,我认为这并不容易,听起来您可以通过重新考虑设计来节省精力。

于 2013-07-26T09:22:21.607 回答