首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF -当设置IsOpen=true时,工具提示数据库无法工作

WPF -当设置IsOpen=true时,工具提示数据库无法工作
EN

Stack Overflow用户
提问于 2015-03-11 13:49:32
回答 1查看 1.1K关注 0票数 2

我有一个按钮,上面有一个ToolTip。

在ToolTip中有数据绑定信息.

我正在显示ToolTip的点击以及MouseOver。

通过使用代码:

代码语言:javascript
复制
private void Button_Click(object sender, RoutedEventArgs e)
    {
        Button btn = sender as Button;
        tt = btn.ToolTip as ToolTip;
        tt.IsOpen = true;
    }

如果单击该按钮,将显示ToolTip,但不显示数据值。

但是如果我把鼠标悬停在按钮上,它就会正确显示。

重要

如果我先悬停在它上面,得到工具提示,把鼠标拿开,然后再来一次,然后点击,它就会正确显示。

因此,我猜想,当我调用tt.IsOpen = true时,我需要对工具提示进行某种调用来获取数据库信息。

如何通过手动调用来实现工具提示的完整显示?

提前谢谢。

更新

xaml密码。

代码语言:javascript
复制
<Button Content="{x:Static prop:strings.Info}" Margin="2" HorizontalAlignment="Center" Click="Button_Click" >
                                <Button.ToolTip>
                                    <ToolTip>
                                        <ToolTip.Template>
                                            <ControlTemplate TargetType="ToolTip">
                                                <Border BorderBrush="Blue" BorderThickness="1" Background="White" CornerRadius="5">
                                                    <StackPanel Orientation="Vertical">
                                                        <DockPanel>
                                                            <TextBlock Text="{x:Static prop:strings.Laenge}" Margin="10" DockPanel.Dock="Left"/>
                                                            <TextBlock Text="{Binding LaengeD}"  Margin="10" DockPanel.Dock="Right" />
                                                        </DockPanel>
                                                        <DockPanel >
                                                            <TextBlock Text="{x:Static prop:strings.Breite}" Margin="10" DockPanel.Dock="Left"/>
                                                            <TextBlock Text="{Binding BreiteD}"  Margin="10" DockPanel.Dock="Right"/>
                                                        </DockPanel>
                                                        <DockPanel>
                                                            <TextBlock Text="{x:Static prop:strings.Hoehe}" Margin="10" DockPanel.Dock="Left"/>
                                                            <TextBlock Text="{Binding HoeheD}"  Margin="10" DockPanel.Dock="Right"/>
                                                        </DockPanel>
                                                        <DockPanel>
                                                            <TextBlock Text="{x:Static prop:strings.Gewicht}" Margin="10" DockPanel.Dock="Left"/>
                                                            <TextBlock Text="{Binding Gewicht}"  Margin="10" DockPanel.Dock="Right"/>
                                                        </DockPanel>
                                                    </StackPanel>
                                                </Border>
                                            </ControlTemplate>
                                        </ToolTip.Template>
                                    </ToolTip>
                                </Button.ToolTip>
                            </Button>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-11 14:32:13

当您的Tooltip被隐藏时,它的PlacementTarget属性被设置为null,并且它没有链接到按钮的逻辑树。在这种情况下,您的{Binding LaengeD}无法检索正确的值。另一方面,如果您将按钮悬停,则PlacementTarget属性将被正确设置,并且您的绑定可以工作。

因此,您可以使用以下解决方案:在工具提示中添加DataContext绑定

代码语言:javascript
复制
<Button Content="Click me" Margin="2" HorizontalAlignment="Center" Click="Button_Click" >
    <Button.ToolTip>
        <ToolTip DataContext="{Binding Path=PlacementTarget.DataContext, RelativeSource={x:Static RelativeSource.Self}}">
            <ToolTip.Template>
                <ControlTemplate TargetType="ToolTip">
                    <Border BorderBrush="Blue" BorderThickness="1" Background="White" CornerRadius="5">
                        <StackPanel Orientation="Vertical">
                            <DockPanel>
                                <TextBlock Text="Laenge" Margin="10" DockPanel.Dock="Left"/>
                                <TextBlock Text="{Binding LaengeD}" Margin="10" DockPanel.Dock="Right" />
                            </DockPanel>
                        </StackPanel>
                    </Border>
                </ControlTemplate>
            </ToolTip.Template>
        </ToolTip>
    </Button.ToolTip>
</Button>

然后以这样的方式更改单击事件处理程序:

代码语言:javascript
复制
private void Button_Click(object sender, RoutedEventArgs e)
{
    Button btn = sender as Button;
    ToolTip tt = btn.ToolTip as ToolTip;

    if (tt.PlacementTarget == null)
    {
        tt.PlacementTarget = btn;
    }

    tt.IsOpen = true;
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28988378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档