c# - 如果需要,显示 WPF 工具提示

标签 c# wpf conditional tooltip

我在有限大小的控件中有一个 TextBlock。如果文本太长无法放入控件中,我想显示一个包含全文的工具提示。这是您肯定从许多应用程序中了解到的经典行为。

我尝试使用转换器将 TextBlock 宽度转换为工具提示的可见性。

<GridViewColumn.CellTemplate>
    <DataTemplate>
        <TextBlock Text="{Binding Text}">
            <TextBlock.ToolTip>
                <ToolTip 
                    DataContext="{TemplateBinding Content}" 
                    Visibility="{Binding Converter={StaticResource visConvert}}">

                        <TextBlock Text="{Binding Text}"></TextBlock>
                </ToolTip>
            </TextBlock.ToolTip>
        </TextBlock>
    </DataTemplate>
</GridViewColumn.CellTemplate>

问题是在转换器中:

public object Convert(object value, ...

'value' 是 DataBound 项。我希望“值”是 TextBlock,观察它的宽度,并将它与 GridViewColumn.Width 进行比较。

最佳答案

我想通了,工具提示具有 PlacementTarget 属性,该属性指定具有工具提示的 UI 元素。如果有人需要它:

<TextBlock Text="{Binding Text}">
    <TextBlock.ToolTip>
        <ToolTip 
             DataContext="{Binding Path=PlacementTarget, RelativeSource={x:Static RelativeSource.Self}}" 
             Visibility="{Binding Converter={StaticResource toolVisConverter}}">
             <TextBlock Text="{Binding Text}"/>  <!-- tooltip content -->
         </ToolTip>
    </TextBlock.ToolTip>
</TextBlock>

然后编写一个 Converter 将 TextBlock 转换为 Visibility(基于 TextBlock 宽度)。

关于c# - 如果需要,显示 WPF 工具提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1115924/

相关文章:

c# - 用于代码对齐的 Visual Studio 扩展

c# - WPF Datagrid 列格式编号以包含逗号

xslt - 选择属性不同的几个元素之一

JSF ui :repeat included by ui:include wrapped in h:panelGroup with conditional rendering. ..一口

grid - MVC Telerik Grid条件列值?

c# - 异常 : System. DllNotFoundException - 使用 .NET Core 2.1 调用 CoolProp( native C++ 库)函数

c# - 使用 WMI 更改远程计算机上的用户密码

c# - 如何从主项目发送附件

c# - xaml解析异常问题仅在win7上

c# - 自动展开 RadGridView 新增行的 RowDetails