有没有办法将单独的格式应用于Binding
中的每个MultiBinding
元素,如下所示:
<TextBlock>
<TextBlock.Text>
<MultiBinding Converter="{StaticResource StringCascadingConverter}">
<Binding Path="MyProperty" StringFormat="{}{0:F1}"></Binding>
<Binding Path="MyProperty2" StringFormat="{}{0:F2}"></Binding>
</MultiBinding>
</TextBlock.Text>
<!--<Run Text="{Binding MyProperty, StringFormat={}{0:F1}}"/>
<Run Text="{Binding MyProperty, StringFormat={}{0:F2}}"/>-->
</TextBlock>
我无法使用Runs
,因为我只能使用.Net 3.5,其中Run.Text
属性不是依赖属性。
在上面的示例中,转换器直接拾取MyProperty和MyProperty2,而不是根据需要格式化值。
答案 0 :(得分:0)
有趣的问题,但答案是您根据MSDN文档找到的内容(BindingBase.StringFormat Property)
如果设置了Converter和StringFormat属性,则转换器为 首先应用于数据值,然后应用StringFormat。
据说,解决方法是修改或创建一个新的多值转换器,它接收字符串后跟格式...为每个字符串格式对执行此操作。
如果您无法修改转换器,那么仍然可以。只需创建一个带有上述主题的新转换器,但在转换后调用原始转换器并返回其结果。
答案 1 :(得分:0)
您可能只需设置MultiBinding的StringFormat
属性:
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0:F1} {1:F2}">
<Binding Path="MyProperty"/>
<Binding Path="MyProperty2"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>