16

I have textblock with 2 Run tags and one Linebreak:

  <TextBlock>
      <Run Text="TopText"/>
      <LineBreak/>
      <Run x:Name="bottomRun" Text="Bottom text"/>
  </TextBlock>

I want to hide second Run tag in code behind. But there is no Visible property... Why is it so? What is the best solution how to hide only one Run tag?

4

5 回答 5

13

VisibilityUIElement类中所有 UI 控件派生但Run不派生的属性。

您可以做的最好的是将Text属性设置String.Empty为后面的代码:

bottomRun.Text = String.Empty;
于 2013-08-11T11:52:50.937 回答
9

您拥有的 TextBlock 非常小。当遇到类似的情况时,我复制了它并在 TextBlock 上绑定了 Visiblity 属性。

<TextBlock Visibility="{Binding Path=LicenseValid, Converter={StaticResource BooleanToVisibilityConverter}, ConverterParameter=false }">
      <Run Text="TopText"/>
      <LineBreak/>
      <Run x:Name="bottomRun" Text="Bottom text"/>
  </TextBlock>

<TextBlock Visibility="{Binding Path=LicenseValid, Converter={StaticResource BooleanToVisibilityConverter}, ConverterParameter=false }">
      <Run Text="TopText"/>
      <LineBreak/>
      <Run x:Name="bottomRun" Text="Bottom text"/>
  </TextBlock>

转换器被适当地声明、定义并采用“反转”参数。

于 2015-10-20T18:30:30.923 回答
2

我知道 OP 想使用一个带有 Runs 的 TextBlock 来解决这个问题,但我用 TextBlocks 的水平方向 StackPanel 解决了这个问题。这是一个较重的解决方案,因为涉及更多控件,但有效。

于 2016-03-10T17:19:54.443 回答
1

有时这是合适的——但如果你真的需要文本来“运行”并且你想在内联元素中有一个自动换行符,那就不理想了。

<TextBlock>
    <InlineUIElement><TextBlock Visibility="Collapsed" Text="TopText"/></InlineUIElement>
    <LineBreak/>
    <Run x:Name="bottomRun" Text="Bottom text"/>
</TextBlock>
于 2014-11-13T08:36:27.063 回答
1

您可以使用带有 Binding 的样式触发器:

<Run>
    <Run.Style>
        <Style TargetType="Run">
            <Setter Property="Text" Value="Bottom text"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=variable}" Value="{x:Null}">
                    <Setter Property="Text" Value=""/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Run.Style>
</Run>
于 2020-04-16T20:33:45.220 回答