- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将 ToolTip 的 PlacementTarget 更改为可视化树中更上层的窗口,以便在该窗口中具有自定义 ToolTip 剪切效果。除了 PlacementTarget,我已经连接了所有东西。这是 XAML 和代码中的示例……都不起作用。此样式当前用于附加到文本框的单个工具提示。
<Style TargetType="ToolTip">
<Setter Property="ToolTipService.PlacementTarget"
Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type Grid }} }" />
</Style>
如果我进入代码并查看 tooltip.PlacementTarget,一旦它附加到某个东西上...它总是设置为 TextBox。我尝试了多种使用 VisualTree 获取不同 UIElement 的方法。似乎没有任何效果......所以我假设我不理解或遗漏了什么。
真正让我着迷的是,如果我进入我的代码并查看工具提示的 PlacementTarget,它不会让我将其设置为任何其他内容。例如:
var ancestors = toolTip.PlacementTarget.GetSelfAndAncestors();
foreach(var ancestor in ancestors)
{
if(var ancestor is Grid)
{
// Conditional always hits.
// Before this line, PlacementTarget is a TextBox.
toolTip.PlacementTarget = (UIElement)ancestor;
// After the line, PlacementTarget is still a TextBox.
}
}
我哪里做错了或没理解?
针对上下文进行编辑:自定义剪辑效果基本上只是找到最接近工具提示目标的祖先窗口,并使用它来确保工具提示永远不会超出该窗口的范围。
最佳答案
设置 Tooltip
的简短示例,使用父 Window
上的属性作为 PlacementTarget
。
<Window x:Class="WpfApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Tag="Bar">
<Window.Resources>
<ToolTip x:Key="FooToolTip">
<StackPanel>
<TextBlock Text="{Binding PlacementTarget.Tag, RelativeSource={RelativeSource AncestorType={x:Type ToolTip}}}"/>
</StackPanel>
</ToolTip>
</Window.Resources>
<Grid>
<TextBlock
Text="Foo"
ToolTip="{StaticResource FooToolTip}"
ToolTipService.PlacementTarget="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}}"
HorizontalAlignment="Center" VerticalAlignment="Center" Height="20" Width="50">
</TextBlock>
</Grid>
</Window>
编辑
回答你的问题,
第一个片段使用 ToolTipService以错误的方式:
The ToolTipService class attached properties are used to determine the placement, behavior, and appearance of a tooltip. These properties are set on the element that defines the tooltip.
应用于样式:
<Window x:Class="WpfApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
Tag="Bar">
<Window.Resources>
<ToolTip x:Key="FooToolTip">
<StackPanel>
<TextBlock Text="{Binding PlacementTarget.Tag, RelativeSource={RelativeSource AncestorType={x:Type ToolTip}}}"/>
</StackPanel>
</ToolTip>
<Style x:Key="ToolTipStyle">
<Setter Property="ToolTipService.ToolTip" Value="{StaticResource FooToolTip}"/>
<Setter Property="ToolTipService.PlacementTarget" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}}}"/>
</Style>
</Window.Resources>
<Grid>
<TextBlock
Text="Foo" Style="{StaticResource ToolTipStyle}"
HorizontalAlignment="Center" VerticalAlignment="Center" Height="20" Width="50">
</TextBlock>
</Grid>
</Window>
至于后面代码中的第二个片段,一旦 ToolTip
打开并且 ToolTip
处于打开状态,您就无法设置 PlacementTarget
关闭 PlacementTarget
为空。正如 @mm8 所指出的,这与 ToolTip
和 PlacementTarget
位于不同的可视化树中有关,因为 ToolTip
产生一个属于自己的 Window
。
关于C# WPF : Changing PlacementTarget of a ToolTip,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44581980/
我基本上是在尝试在按钮悬停时实现弹出窗口。当用户将鼠标悬停在按钮上时,我希望弹出窗口出现。如果不是,我只想显示标签。它有点像工具提示,只是我不希望 Popup 在经过一段时间后消失。我有点让它在按钮上
上述数据模板应用于 ItemsContr
这个问题在这里已经有了答案: Setting a WPF ContextMenu's PlacementTarget property in XAML? (3 个回答) 6年前关闭。 我的 WPF 应
我正在尝试将 ToolTip 的 PlacementTarget 更改为可视化树中更上层的窗口,以便在该窗口中具有自定义 ToolTip 剪切效果。除了 PlacementTarget,我已经连接了所
在我的应用程序中,我有一个 View (ListView) 和一个 View 模型。在 View 模型中,我有两个属性:第一个是项目列表,第二个是命令。我想在 ListView 中显示项目(来自第一个
我正在尝试将 ContextMenu 绑定(bind)到 ViewModel 的命令。经过一些在线搜索,我了解到由于 ContextMenu 不属于目标可视化树,因此我需要使用例如 Tag 和 Pla
使用 MVVM 模式时如何获取所选 ContextMenu 的 PlacementTarget ? 使用 MenuItem 单击事件时,我可以像这样获得 PlacementTarget。但它是如何做到
我有一个典型的 MVVM 设置,包括 Listbox 和 vm + DataTemplate 和 item vm。数据模板有工具提示,其中包含绑定(bind)到项目 vm 的元素。一切都很好。 现在,
给我一个运行时错误“UIElement”类型没有公共(public) TypeConverter 类 我也试过 并将
在这样的场景中: ... 我需要将 PlacementTarget 绑定(bind)到名为 MyBtn 的按钮在 内我的Ctl。什么是最干净的方法? 最佳答案 关于wpf - 如
我是一名优秀的程序员,十分优秀!