2014-06-19 91 views
2

我找不出我的MultiBinding StringFormat行为。我有一个DataContext,它通过属性MinIncl和MaxIncl定义一个数字范围。我想创建一个工具提示使用MultiBinding来创建一个像“1.0到999.0”的提示。我尝试以下代码:XAML MultiBinding StringFormat

  <ToolTipService.ToolTip> 
     <StackPanel> 
      <TextBlock> 
       <TextBlock.Text> 
       <MultiBinding StringFormat="{}{0:F1} to {1:F1}"> 
        <Binding Path="SelectedTrainingScriptParameter.MinimumInclusive"/> 
        <Binding Path="SelectedTrainingScriptParameter.MaximumInclusive"/> 
       </MultiBinding> 
       </TextBlock.Text> 
      </TextBlock> 
     </StackPanel> 
    </ToolTipService.ToolTip> 

生成的工具提示为“至999.0 1.0”。所以它已经改变了范围并且首先将“to”这个词放到了。

如果我删除空格并尝试“{} {0:F1}到{1:F1}”,我会得到正确的答案:“1.0to999.0”。

说真的,为什么空白和单词“to”会破坏这件事?

谢谢。

-reilly。

+3

我测试了你发布的XAML,并且(至少对我来说),我的工具提示显示“1.0到999.0”(用.NET 4.5和.NET 3.5试用)。因此,您使用的'StringFormat'确定。该问题似乎超出了您在问题中显示的代码范围。 –

+1

@fmunkert:你说得对。我的工具提示来自扩展WPF工具包(http://wpftoolkit.codeplex.com/wikipage?title=DoubleUpDown)中的DoubleUpDown控件。当我在TextBox上使用相同的绑定时,它工作正常。我从来没有想过检查控制... – Reilly

回答

1

在这种情况下,你不需要一个多,只需使用相同的TextBlock而不是像;

<TextBlock> 
    <Run Text="{Binding Path=SelectedTrainingScriptParameter.MinimumInclusive}"/> 
    <Run Text="to"/> 
    <Run Text="{Binding Path=SelectedTrainingScriptParameter.MaximumInclusive}"/> 
</TextBlock> 

或者如果你真的想按原样使用它;

<TextBlock> 
    <TextBlock.Text>  
     <MultiBinding StringFormat="{}{0} to {1}"> 
      <Binding Path="SelectedTrainingScriptParameter.MinimumInclusive}" /> 
      <Binding Path="SelectedTrainingScriptParameter.MaximumInclusive" /> 
     </MultiBinding> 
    </TextBlock.Text> 
</TextBlock> 

至于怪异的空白的东西,不知道对不起。希望这有助于,欢呼。

+0

W:我用你的建议作为修复,它的工作原理。如果你看看我对上面fmunkert的评论,结果发现奇怪的格式是由封闭的自由控制完成的。谢谢你的帮助。 – Reilly

+0

不用担心,当我看着你的时候,它看起来也是正确的,但是我没有时间去测试任何东西,但是对于这个东西来说一件很酷的事情,尽管通常总是有另一种方式。 –