2015-12-29 37 views
6

我想在文本塊內創建一個多重綁定的工具提示,但是無論我嘗試什麼都行不通。WPF - 帶多重綁定的工具提示

這是我到目前爲止已經試過:

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

但是當我嘗試它,我所看到的提示是:System.Windows.Controls.TextBlock。

當我嘗試沒有tooltipservice,只有提示,像這樣:

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

屏幕只是會被卡住。

回答

0

只需刪除空括號。接下來的代碼按預期方式工作:

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

如果使用的StringFormat左括號{的XAML分析器要求您使用一對大括號逃脫它開始{}。否則解析器會感到困惑,因爲標記擴展的語法中也使用了大括號。

有關詳細信息,請參見{} Escape Sequence/Markup Extension的XAML文檔。

此外,您不能使用內聯綁定的雙引號,但單引號可用。

+0

@Pachu ok我回答了你關於方括號和添加整個工作代碼。使用後你還有什麼問題嗎? –

+0

我這樣做,我在工具提示中看到以下文本:「System.Windows.Controls.TextBlock」,而不是我想要的文本。 – Pachu

+0

對不起,但我不能重現您的問題。我刪除了空括號,現在代碼工作正常。你使用什麼版本的.net框架?是你的例子是風格/模板的一部分或不是? –

2

我dont't知道至極VS版本中,你正在使用,但:

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

甚至不編譯我。

只需刪除「和空括號這樣的:

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

你也可以把它寫這樣的,如果你想」:

<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

也請刪除空的支架,只是爲了確保。然後,正如我所說,你可能在填寫自己的裝訂時遇到問題,它應該工作。它顯示「System.Windows.Controls.TextBlock」它可能意味着你在代碼後面編寫類似Description = new TextBlock()的代碼? – Ouarzy

0

我曾嘗試下面的代碼,並且完美工作:

<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

我試過了,但是我在工具提示中可以看到的是:System.Windows.Controls.TextBlock – Pachu

+0

@Pachu你能告訴我代碼嗎?我想你需要在你的類中實現override tostring()方法。 –

+0

@Pachu你有辦法多綁定你的工具提示嗎? –