【问题标题】:WPF - Setting ToolTip MaxWidthWPF - 设置工具提示 MaxWidth
【发布时间】:2012-12-11 13:52:02
【问题描述】:

我想设置 ToolTip maxwidth 属性以正确显示长文本。另外我需要文字换行。我使用了这种风格:

<Style TargetType="ToolTip">
        <Setter Property="ContentTemplate">
            <Setter.Value>
                <DataTemplate>
                    <StackPanel>
                        <TextBlock Text="{Binding}"  MaxWidth="400" TextWrapping='Wrap' />
                    </StackPanel>
                </DataTemplate>
            </Setter.Value>
        </Setter>
</Style>

这种工具提示样式适合我的目的。但是,对于某些具有自己的工具提示样式的控件,它是无效的。比如下面这个按钮的tooltip就不能出现。

<Button>
    <Button.ToolTip>
        <StackPanel>
            <TextBlock Style="{StaticResource firstText}" Text="aaaaaaaaaaaaa"/>
            <TextBlock Style="{StaticResource secondText}" Text="bbbbbbbbbbbbb"/>    
            <TextBlock Bacground="Red" Text="ccccccccccccc"/>    
        </StackPanel>
    </Button.ToolTip>
</Button>

我想为 所有工具提示 设置带有文本换行的 maxwidth 属性。我能为这个问题做些什么?

【问题讨论】:

  • 对于某些具有自己的工具提示样式的控件,是什么意思。
  • 我的意思是特定的工具提示。例如示例中的按钮,由三个文本块组成。但如果我使用like as:,我的样式是成功的。因此,具有不同结构的不同工具提示不能使用我的样式..
  • 我提高了它,但我认为你应该更多地解释你的目标。总有更好的做事方式:-)。

标签: wpf xaml wpf-controls tooltip


【解决方案1】:

使用这个:

<Window.Resources>
 <Style TargetType="ToolTip" x:Key="TT">
    <Setter Property="ContentTemplate">
        <Setter.Value>
            <DataTemplate>
                <StackPanel>
                    <TextBlock Text="{Binding}"  MaxWidth="400" TextWrapping='Wrap' />
                </StackPanel>
            </DataTemplate>
        </Setter.Value>
    </Setter>
 </Style>
</Window.Resources>

<Button>
    <Button.ToolTip>
        <ToolTip Style="{StaticResource TT}">
  bbbbbbbbbbbbbbbbbbbdddddddddddddddddbbbmmmmmmhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
        </ToolTip>
    </Button.ToolTip>
</Button>

编辑:

<Button>
    <Button.ToolTip>
        <RichTextBox>
           <FlowDocument>
              <Paragraph>
                This is flow content and you can <Bold>edit me!</Bold>
              </Paragraph>
           </FlowDocument>
</RichTextBox>
    </Button.ToolTip>
</Button>

见:RichTextBox Overview

【讨论】:

  • 我不应该更改控件​​的内容。按钮应该像我的问题一样出现(带有两个文本块的堆栈面板)。
  • @iremce 我的示例按钮与您的相同。您已将其 Tooltip 设置为 StackPanel,但我将其更改为具有您的样式的 Tooltip。我认为你应该解释你的目标。为什么不使用 Tooltip 样式?您希望工具提示显示两个段落吗?
  • 是的,按钮或其他控件的工具提示可以由多于一个段落组成。我不应该更改控件​​的工具提示结构..
  • @iremce 你可以使用 RichTextBox 控件。它更加灵活。查看我的编辑
  • 我没有更改控件结构的权限。所以我不能使用 RichTextBox.. 另外我编辑了我的按钮示例..
【解决方案2】:

ToolTip 的以下样式对我很有用:

<Style TargetType="ToolTip" x:Key="InternalToolTipStyle">
    <Setter Property="MaxWidth" Value="{Binding Path=(lib:ToolTipProperties.MaxWidth)}" />
    <Setter Property="ContentTemplate">
        <Setter.Value>
            <DataTemplate>
                <ContentPresenter Content="{TemplateBinding Content}"  >
                    <ContentPresenter.Resources>
                        <Style TargetType="{x:Type TextBlock}">
                            <Setter Property="TextWrapping" Value="Wrap" />
                        </Style>
                    </ContentPresenter.Resources>
                </ContentPresenter>
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>

使用此样式,以下按钮的工具提示正确显示:

<Button>
<Button.ToolTip>
    <StackPanel>
        <TextBlock Style="{StaticResource firstText}" Text="aaaaaaaaaaaaa"/>
        <TextBlock Style="{StaticResource secondText}" Text="bbbbbbbbbbbbb"/>    
        <TextBlock Bacground="Red" Text="ccccccccccccc"/>    
    </StackPanel>
</Button.ToolTip>

【讨论】:

    【解决方案3】:

    我避免使用模板,因为必须实现很多东西。更优雅的方式来做到这一点

    <Style TargetType="ToolTip">
        <Style.Resources>
            <Style TargetType="ContentPresenter">
                <Style.Resources>
                    <Style TargetType="TextBlock">
                        <Setter Property="TextWrapping" Value="Wrap" />
                    </Style>
                </Style.Resources>
            </Style>
        </Style.Resources>
        <Setter Property="MaxWidth" Value="500" />
    </Style>
    

    【讨论】:

    • 这实际上是一个非常好的和干净的解决方案,可以重复使用。我认为在 TargetType 中使用 x:Type 也更加严格和清晰。
    • 只是因为我使用了很多自定义工具提示。我认为您应该将最大宽度属性移动到实际的文本块样式上。这意味着您的所有默认工具提示都有最大宽度,但您的所有自定义工具提示都定义了自己的参数。
    【解决方案4】:

    我意识到这是一个老问题,但似乎没有人提出最明显和最简单的解决方案来解决这个问题。因此,我想我会在这里添加它:

    <Button>
        <Button.ToolTip>
            <ToolTip MaxWidth="400">
                <TextBlock Text="{Binding Binding}" TextWrapping="Wrap" />
            </ToolTip>
        </Button.ToolTip>
    </Button>
    

    【讨论】:

    • 最简单的解决方案!
    猜你喜欢
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2019-09-14
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    相关资源
    最近更新 更多