【问题标题】:WPF Popup vs TooltipWPF 弹出窗口与工具提示
【发布时间】:2017-05-24 09:05:24
【问题描述】:

我已经看到很多关于何时使用工具提示和何时使用弹出窗口的争论,但我不知道哪一个更适合我的情况。

我有一个按钮。当我点击它时,会出现弹出面板,它有很多文本和一个小图像(所以它会是一个很大的面板)。面板必须保持在那里,直到我将光标移离按钮(当光标仍在面板上但离开按钮时,它仍然必须关闭)。

<Button Click="clicked" MouseLeave="mouseleaved"/>
<Popup Name="mypopup">
    <stuff>
</Popup>

private void clicked(object sender, RoutedEventArgs e) {
    mypopopup.isopen = true;
}

private void mouseleaved(object sender, MouseEventArgs e) {
    mypopup.isopen = false;
}

这是我到目前为止的目标。问题是有时,弹出窗口出现在按钮的顶部(这会阻止按钮的视图,因此 MouseLeave 事件开始,弹出窗口立即消失)。我希望弹出窗口一直存在,直到我将光标从按钮上移开。

所以我做了一些谷歌,我认为 Tooltip 可以避免这个问题。但是如何让工具提示出现在按钮单击而不是按钮悬停时?

哪一个更适合我?工具提示还是弹出窗口?

编辑

我想我的问题不太清楚。我在问我应该根据我的具体情况(第 2 段)而不是一般情况使用哪个工具提示与弹出窗口。我认为 Popup 是正确的使用方法,但我在使用它时遇到了问题(第 3 段)。所以我的问题是我可以用 Popup 解决这个问题还是应该更好地使用 Tooltip?

【问题讨论】:

标签: c# wpf popup tooltip


【解决方案1】:

但是如何让工具提示出现在按钮点击而不是按钮悬停时?

处理ButtonClick 事件并将PopupIsOpen 属性设置为true

private void Button_Click(object sender, RoutedEventArgs e)
{
    popup1.IsOpen = true;
}

<Popup x:Name="popup1" StaysOpen="False">
    <TextBlock>popup content...</TextBlock>
</Popup>
<Button Click="Button_Click" Content="op" />

哪一个更适合我?工具提示还是弹出窗口?

Popup 是您希望以任何方式自定义行为的首选。

编辑:如果我正确理解您的问题,这应该可以:

<Button x:Name="button" Content="Button" Click="clicked" MouseLeave="mouseleaved"/>
<Popup Name="popup" PlacementTarget="{Binding ElementName=button}" StaysOpen="True" MouseLeave="mouseleaved">
    <Border Background="Yellow">
        <TextBlock>contents...</TextBlock>
    </Border>
</Popup>

private void clicked(object sender, RoutedEventArgs e)
{
    popup.IsOpen = true;
}

private void mouseleaved(object sender, MouseEventArgs e)
{
    if (!button.IsMouseOver && !popup.IsMouseOver)
        popup.IsOpen = false;
}

【讨论】:

  • 你的回答很有道理。但没有完全回答我的问题。对不起,如果我不认为我说得太清楚了。请在顶部查看我的编辑。
  • 如前所述,Popup 是正确的选择。如果你有任何问题,你应该提供你的问题的回购:stackoverflow.com/help/how-to-ask
  • 我在单击按钮时打开弹出窗口。我使用按钮上的 MouseLeave 事件关闭弹出窗口(即,当我将鼠标从按钮上移开时)。有时弹出窗口会在按钮顶部打开,因此会立即调用 MouseLeave(因为它覆盖了按钮)。如果使用 Popup,我该如何解决这个问题?
  • 我在这里重复一遍:如果您需要任何帮助,请发布一些演示此行为的代码。
  • 但您可以使用 Placement、PlacementRectangle 和 Offset 属性定位弹出窗口:msdn.microsoft.com/en-us/library/ms753224(v=vs.85).aspx。这能回答你的问题吗?
猜你喜欢
  • 2023-03-06
  • 1970-01-01
  • 2018-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-30
  • 2012-10-12
  • 2012-07-15
相关资源
最近更新 更多