2012-12-25 67 views
12

我想设置ToolTip maxwidth属性以正确显示长文本。另外我需要文字包装。我使用过这种风格:WPF - 设置工具提示MaxWidth

<Style TargetType="ToolTip"> 
     <Setter Property="ContentTemplate"> 
      <Setter.Value> 
       <DataTemplate> 
        <StackPanel> 
         <TextBlock Text="{Binding}" MaxWidth="400" TextWrapping='Wrap' /> 
        </StackPanel> 
       </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> 
</Button> 

我想设置与文字环绕maxWidth属性为所有的提示。我能为这个问题做些什么?

+0

对于某些具有自己的工具提示风格的控件,你是什么意思。**? – Ramin

+0

我的意思是特定的工具提示。例如,在示例中的按钮,包含三个textblock.But,如果我使用像:

+0

我提高了它,但我认为你应该更多地解释你的**目标。总会有更好的方式来做事情:-)。 – Ramin

回答

10

继工具提示的风格是有用的我:

<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> 

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

+0

我不应该改变控件的内容。按钮应该像我的问题一样出现(带有两个文本块的堆栈面板)。 – iremce

+0

@iremce我的例子中的按钮和你的一样。您已将其Tooltip设置为StackPanel,但我将其更改为您的风格的Tooltip。我想你应该解释你的目标。为什么不使用Tooltip风格?你想要ToolTip显示两个段落吗? – Ramin

+0

是的,按钮或其他控件的提示可以由多于一个段落组成。我不应该改变控件的工具提示结构。 – iremce

15

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

<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> 
+1

这实际上是一个非常好的和干净的解决方案,有很多重用。我认为在TargetType中使用x:Type也更加严格和更干净。 –

12

我意识到这是一个老问题,但似乎没有人建议最明显和最简单的解决这个问题呢。因此,我认为我会在这里添加它:

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

最简单的解决方案! –

+1

简单&好的,;) – Coding4Fun