2015-12-29 20 views
6

Ich möchte einen Tooltip mit Multibinding in einem Textblock machen, aber was auch immer ich versuche, es funktioniert nicht. HierWPF - ToolTip mit Multibinding

ist, was ich versucht habe, so weit:

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

Aber wenn ich es versuchen, was ich auf dem Tooltip zu sehen ist: System.Windows.Controls.TextBlock.

, wenn ich es ohne tooltipservice versuchen, und nur Tooltip, wie folgt aus:

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

Der Bildschirm bekommen nur stecken.

Antwort

0

Löschen Sie einfach leere Klammern. Weiter Code wie erwartet:

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

Wenn der String mit einer linken Klammer beginnt {der XAML-Parser benötigen Sie es zu entkommen ein Paar Klammer mit {}. Andernfalls wird der Parser verwirrt, da Klammern auch in der Syntax von Markup-Erweiterungen verwendet werden. Weitere Informationen finden Sie in der XAML-Dokumentation für {} Escape Sequence/Markup Extension.

Sie können auch keine doppelten Anführungszeichen mit Inline-Bindung verwenden, aber einfache Anführungszeichen stehen zur Verfügung.

+0

@Pachu ok Ich antwortete Ihnen über Klammern und fügen Sie ganzen Workong-Code hinzu. Hatten Sie nach dem Gebrauch noch Probleme? –

+0

Ich tue, ich sehe den folgenden Text in der QuickInfo: "System.Windows.Controls.TextBlock" anstelle des gewünschten Textes. – Pachu

+0

Leider kann ich Ihr Problem nicht reproduzieren. Ich habe leere Klammern gelöscht und nun funktioniert der Code einwandfrei. Welche Version von .net Framework verwenden Sie? Ist Ihr Beispiel ein Teil von Style/Template oder nicht? –

2

Ich weiß, wich dont't VS-Version Sie verwenden, aber:

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

nicht einmal für mich kompilieren.

Entfernen Sie einfach die „und die leeren Klammern wie folgt aus:

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

Sie es auch so schreiben könnte, wenn Sie das wollen“:

<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

Bitte entfernen Sie auch die leere Halterung, um sicher zu sein. Dann, wie gesagt, Sie haben vielleicht ein Problem damit, wie Sie Ihre Bindung füllen, es sollte funktionieren. Es zeigt "System.Windows.Controls.TextBlock" es könnte bedeuten, dass Sie etwas wie Description = new TextBlock() in Ihrem Code hinter sich? – Ouarzy

0

Ich habe den folgenden Code versucht, und dass hat perfekt funktioniert:

<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

Ich habe das versucht, aber alles, was ich in der QuickInfo sehen kann, ist: System.Windows.Controls.TextBlock – Pachu

+0

@Pachu Können Sie mir den Code zeigen?Ich denke, Sie müssen die override tostring() -Methode in Ihrer Klasse implementieren. –

+0

@Pachu Haben Sie die Möglichkeit, Ihre Werkzeugspitze zu binden? –