WPF样式设置器中的多个运行元素

14

XAML 中,是否可以在 Style 的 setter 中定义多个 Run

以下代码定义了两个 Run 并导致失败:

属性“Value”设置了多次。

<TextBlock>
    <TextBlock.Style>
         <Style TargetType="{x:Type TextBlock}">
              <Setter Property="Text">
                   <Setter.Value>
                       <Run Text="{Binding SelectedItem.iso}"/>
                       <Run Text="{Binding SelectedItem.value}"/>
                  </Setter.Value>
              </Setter>
             <Style.Triggers>
                 <DataTrigger Binding="{Binding SelectedItem.type}" Value={x:Null}">
                      <Setter Property="Text" Value="No value" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>

在保留多个 Run 的使用的情况下,这能被修复吗?


即使样式设置器接受多个值,这也不起作用。多个运行不是设置为TextBlock的“Text”属性,而是设置为其“Inlines”属性。但是,“Inlines”不是依赖属性,因此不能由样式设置器设置。 - Clemens
请查看此链接:https://dev59.com/FWXWa4cB1Zd3GeqPMWWs它有两个可用选项供您选择。 - Amit Raz
1个回答

15

Setter只能工作在一个属性上,所以它只能有一个值。你得到的错误是合理的:它无法理解你试图做什么,它只能将属性设置为给定的值。

因此,想法是将该值作为附加文本提供给它。为此,您可以使用MultiBinding,它接受多个值并根据您提供的StringFormat返回它们作为一个值:

<Setter.Value>
    <MultiBinding StringFormat="{}{0}{1}{2}"><!-- Format as you wish -->
        <Binding Path="SelectedItem.iso"/>
        <Binding Source="{x:Static System:Environment.NewLine}"/>
        <Binding Path="SelectedItem.value"/>
    </MultiBinding>
</Setter.Value>

关于StringFormat的注意事项:你需要在首位使用{}来转义括号,否则它会将它们视为标记扩展启动器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接