2012-12-25 14 views
12

Vorrei impostare ToolTip maxwidth per mostrare correttamente i testi lunghi. Inoltre ho bisogno del text wrapping. Ho usato questo stile:WPF - Impostazione 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> 

Questo stile di descrizione è corretto per il mio scopo. Tuttavia, non è efficace per alcuni controlli che hanno il proprio stile di descrizione dei comandi. Ad esempio, la descrizione comando del seguente pulsante non può apparire.

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

voglio impostare la proprietà maxwidth con la disposizione del testo per tutti i suggerimenti . Cosa posso fare per questo problema?

+0

Cosa intendi per ** per alcuni controlli che hanno il proprio stile di descrizione dei comandi. **? – Ramin

+0

Intendo suggerimenti specifici. Per esempio il pulsante in esempio, consistono in tre blocchi di testo. Ma se uso come:

+0

L'ho alzato, ma penso che dovresti spiegare il tuo ** obiettivo ** di più. Ci sono sempre modi migliori per fare le cose :-). – Ramin

risposta

10

Seguendo lo stile di descrizione comandi è utile per me:

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

Con questo stile, tooltip del seguente pulsante viene visualizzato correttamente:

<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

Utilizzare questa:

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

Edit:

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

vedi: RichTextBox Overview

+0

Non dovrei cambiare il contenuto del controllo. Il pulsante dovrebbe apparire come la mia domanda (con stackpanel con due blocchi di testo). – iremce

+0

@iremce Il pulsante del mio esempio è uguale al tuo. Hai impostato il Tooltip come uno StackPanel, ma lo cambio per essere un Tooltip con il tuo stile. Penso che dovresti spiegare il tuo obiettivo. Perché non usare lo stile Tooltip? Vuoi che la descrizione comandi mostri due paragrafi? – Ramin

+0

Sì, la descrizione del pulsante o altro controllo può consistere in uno più di paragrafi. Non dovrei modificare la struttura del tooltip dei controlli. – iremce

15

meglio cercare di evitare Template perché molte cose devono essere implementare. modo in modo più elegante per farlo

<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

Questa è in realtà una soluzione molto buona e pulita con molto riuso. Penso che l'uso di x: Type sia anche più rigido e più pulito in TargetType. –

12

Mi rendo conto che questa è una vecchia questione, ma nessuno sembra aver suggerito la soluzione più ovvia e più semplice a questo problema ancora. Come tale, ho pensato di aggiungerlo qui:

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

La soluzione più semplice! –

+1

Semplice e buono,;) – Coding4Fun