我有一个带有工具提示的按钮。
工具提示内有数据绑定(bind)信息。
我在单击和鼠标悬停时显示工具提示。
通过使用代码:
private void Button_Click(object sender, RoutedEventArgs e)
{
Button btn = sender as Button;
tt = btn.ToolTip as ToolTip;
tt.IsOpen = true;
}
如果我单击该按钮,则会显示工具提示,但不显示数据值。
但是如果我将鼠标悬停在按钮上,它就会正确显示。
重要
如果我先将鼠标悬停在它上面,获取工具提示,将鼠标移开,然后再次单击,它就会正确显示。
所以我猜测当我调用tt.IsOpen = true
时,我需要对工具提示进行某种调用以获取数据绑定(bind)信息
如何通过手动调用来实现tooltip的完整显示?
提前致谢。
更新
xaml 代码。
<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>
最佳答案
当您的 Tooltip
隐藏时,其 PlacementTarget
属性将设置为 null,并且不会链接到按钮的逻辑树。
在这种情况下,您的 {Binding LaengeD}
无法检索正确的值。
另一方面,如果您将鼠标悬停在按钮上,则 PlacementTarget
属性已正确设置,并且您的绑定(bind)可以正常工作。
因此您可以使用此解决方案:将 DataContext 绑定(bind)添加到工具提示
<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>
然后按以下方式更改您的点击事件处理程序:
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;
}
关于c# - WPF - 设置 IsOpen=true 时工具提示数据绑定(bind)不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28988378/