2015-12-29 33 views
6

Voglio creare un tooltip con multibinding all'interno di un blocco di testo, ma qualunque cosa provi, non funziona.WPF - ToolTip con multibinding

Ecco quello che ho provato finora:

<TextBlock Text="{Binding Description, StringFormat='Description : {0}{}'}"> 
    <ToolTipService.ToolTip> 
     <TextBlock> 
      <TextBlock.Text> 
       <MultiBinding StringFormat="Description : {0}{1}{}"> 
        <Binding Path="FirstDescription" /> 
        <Binding Path="SecondDescription" /> 
       </MultiBinding> 
      </TextBlock.Text> 
     </TextBlock> 
    </ToolTipService.ToolTip> 
</TextBlock> 

Ma quando ho provato, quello che vedo sul tooltip è: System.Windows.Controls.TextBlock.

quando provo senza tooltipservice, e solo tooltip, in questo modo:

<TextBlock Text="{Binding Description, StringFormat='Description : {0}{}'}"> 
    <ToolTip> 
     <TextBlock> 
      <TextBlock.Text> 
       <MultiBinding StringFormat="Description : {0}{1}{}"> 
        <Binding Path="FirstDescription" /> 
        <Binding Path="SecondDescription" /> 
       </MultiBinding> 
      </TextBlock.Text> 
     </TextBlock> 
    </ToolTip> 
</TextBlock> 

Lo schermo appena si blocca.

risposta

0

Basta eliminare le parentesi vuote. Prossimo lavoro codice come previsto:

<TextBlock Text="{Binding Description, StringFormat='Description : {0}'}"> 
    <ToolTipService.ToolTip> 
     <TextBlock> 
        <TextBlock.Text> 
         <MultiBinding StringFormat="Description : {0}{1}"> 
          <Binding Path="FirstDescription" /> 
          <Binding Path="SecondDescription" /> 
         </MultiBinding> 
        </TextBlock.Text> 
     </TextBlock> 
    </ToolTipService.ToolTip> 
</TextBlock> 

Se StringFormat inizia con una parentesi graffa sinistra {il parser XAML richiedono di fuggire utilizzando un paio di parentesi graffe {}. In caso contrario, il parser viene confuso perché le parentesi graffe vengono utilizzate anche nella sintassi delle estensioni di markup.

I dettagli si trovano nella documentazione XAML per {} Escape Sequence/Markup Extension.

Inoltre, non è possibile utilizzare le virgolette con rilegatura incorporata ma sono disponibili virgolette singole.

+0

@Pachu ok Vi ho risposto circa le parentesi e aggiunto l'intero codice workong. Hai ancora problemi dopo averlo usato? –

+0

Sì, vedo il seguente testo nel suggerimento: "System.Windows.Controls.TextBlock" al posto del testo che voglio. – Pachu

+0

Siamo spiacenti ma non riesco a riprodurre il problema. Ho cancellato le parentesi vuote e ora il codice funziona correttamente. Quale versione di .net framework usi? Il tuo esempio è una parte di Style/Template o no? –

2

ho Dont't so wich VS versione che si sta utilizzando, ma:

<TextBlock Text="{Binding Description, StringFormat="Description : {0}{}"}"> 

non ha nemmeno compilare per me.

Basta togliere i "e le staffe vuote come quella:

<TextBlock Text="{Binding Description, StringFormat=Description : {0}"> 

si potrebbe anche scrivere in questo modo se si desidera che il":

<TextBlock> 
    <TextBlock.Text> 
     <Binding Path="Description" StringFormat="Description : {0}" /> 
    </TextBlock.Text> 
    <ToolTipService.ToolTip> 
     <TextBlock> 
        <TextBlock.Text> 
         <MultiBinding StringFormat="Description : {0}{1}"> 
          <Binding Path="FirstDescription" /> 
          <Binding Path="SecondDescription" /> 
         </MultiBinding> 
        </TextBlock.Text> 
     </TextBlock> 
    </ToolTipService.ToolTip> 
</TextBlock> 
+0

Si prega di rimuovere anche la parentesi vuota, solo per essere sicuro. Quindi, come ho detto, potresti avere un problema nel modo in cui riempi la tua rilegatura, dovrebbe funzionare. Esso visualizza "System.Windows.Controls.TextBlock" potrebbe significare che si codifica qualcosa come Descrizione = new TextBlock() nel codice dietro? – Ouarzy

0

Ho provato il seguente codice e che ha funzionato perfettamente:

<TextBlock Margin="20" Foreground="Black" FontSize="20" FontFamily="Century Gothic" Text="{Binding Name1}"> 
     <TextBlock.ToolTip> 
      <TextBlock> 
       <TextBlock.Text> 
        <MultiBinding StringFormat="MultiBinded Tooltip : {0}{1}"> 
         <Binding Path="Name1"/> 
         <Binding Path="Name2"/> 
        </MultiBinding> 
       </TextBlock.Text> 
      </TextBlock> 
     </TextBlock.ToolTip> 
    </TextBlock> 
+0

Ho provato, ma tutto quello che posso vedere nel suggerimento è: System.Windows.Controls.TextBlock – Pachu

+0

@Pachu Puoi mostrarmi il codice?Penso che tu abbia bisogno di implementare il metodo override tostring() nella tua classe. –

+0

@Pachu Hai il modo di legare più volte il tuo suggerimento? –