C# WPF弹出窗口与工具提示

C# WPF弹出窗口与工具提示,c#,wpf,popup,tooltip,C#,Wpf,Popup,Tooltip,我看到了很多关于何时使用工具提示和何时使用弹出窗口的争论,但我不知道哪一个更适合我的情况 我有一个钮扣。当我点击它时,弹出面板会出现,它有很多文本和一个小图像(因此它将是一个相当大的面板)。面板必须保持在那里,直到我将光标移离按钮(当光标仍在面板上但离开按钮时,面板必须仍然关闭) 到目前为止,我就是从这里开始的。问题是,有时,弹出窗口出现在按钮的顶部(这会阻止按钮的查看,因此MouseLeave事件启动,弹出窗口立即消失)。我希望弹出窗口保持不变,直到我将光标从按钮上移开 <Button

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

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

到目前为止,我就是从这里开始的。问题是,有时,弹出窗口出现在按钮的顶部(这会阻止按钮的查看,因此MouseLeave事件启动,弹出窗口立即消失)。我希望弹出窗口保持不变,直到我将光标从按钮上移开

<Button Click="clicked" MouseLeave="mouseleaved"/>
<Popup Name="mypopup">
    <stuff>
</Popup>
所以我做了一些谷歌,我认为工具提示可以避免这个问题。但如何让工具提示显示在按钮单击而不是按钮悬停上

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

编辑

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

但如何让工具提示显示在按钮单击而不是按钮悬停上

处理
按钮的
单击
事件,并将
弹出窗口的
IsOpen
属性设置为
true

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


但如何让工具提示显示在按钮单击而不是按钮悬停上

处理
按钮的
单击
事件,并将
弹出窗口的
IsOpen
属性设置为
true

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



这一个的可能复制品也很相似,这是一个相似的问题,但两者都不能回答我的问题。我是根据我的具体情况提出要求的(见第2段)。第三段描述了我使用Popup时的问题。所以我的问题是-有没有一种方法可以在使用弹出窗口时解决这个问题,或者更好的方法是使用ToolTipple,这一个的可能副本也是类似的问题,但两者都不能回答我的问题。我是根据我的具体情况提出要求的(见第2段)。第三段描述了我使用Popup时的问题。所以我的问题是-有没有一种方法可以解决这个问题,当使用弹出窗口或是更好地使用工具提示你的答案是有意义的。但并没有完全回答我的问题。对不起,如果我不认为我说得太清楚了。请看我在顶部的编辑。如前所述,弹出窗口是正确的选择。如果你有任何问题,你应该提供你的问题回购:我打开按钮时,点击弹出窗口。我使用MouseLeave事件打开按钮关闭弹出窗口(即,当我将鼠标从按钮上移开时)。有时弹出窗口会在按钮顶部打开,因此会立即调用MouseLeave(因为它覆盖了按钮)。如果使用Popup,该如何解决此问题?我在这里重复:如果需要帮助,请发布一些代码来演示此行为。但是,您可以使用Placement、PlacementRectangle和Offset属性来定位弹出窗口:。这回答了你的问题吗?你的回答有道理。但并没有完全回答我的问题。对不起,如果我不认为我说得太清楚了。请看我在顶部的编辑。如前所述,弹出窗口是正确的选择。如果你有任何问题,你应该提供你的问题回购:我打开按钮时,点击弹出窗口。我使用MouseLeave事件打开按钮关闭弹出窗口(即,当我将鼠标从按钮上移开时)。有时弹出窗口会在按钮顶部打开,因此会立即调用MouseLeave(因为它覆盖了按钮)。如果使用Popup,该如何解决此问题?我在这里重复:如果需要帮助,请发布一些代码来演示此行为。但是,您可以使用Placement、PlacementRectangle和Offset属性来定位弹出窗口:。这回答了你的问题吗?
<Popup x:Name="popup1" StaysOpen="False">
    <TextBlock>popup content...</TextBlock>
</Popup>
<Button Click="Button_Click" Content="op" />
<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;
}