在< Run />TextBlock中隐藏标记- WPF

ibrsph3r  于 2022-12-24  发布在  其他
关注(0)|答案(6)|浏览(321)

我有2个Run标签和一个Linebreak的文本块:

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

我想在代码后面隐藏第二个Run标签。但是没有Visible属性...为什么会这样?什么是最好的解决方案如何隐藏只有一个Run标签?

xam8gpfp

xam8gpfp1#

VisibilityUIElement类中的属性,所有UI控件都从该属性派生,但Run不从该属性派生。
您最好在代码隐藏中将Text属性设置为String.Empty

bottomRun.Text = String.Empty;
wmvff8tz

wmvff8tz2#

你得到的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>

转换器被适当地声明、定义并接受“invert”参数。

ig9co6j1

ig9co6j13#

您可以使用带绑定的样式触发器:

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

mznpcxlj4#

我知道OP想要用一个单独的文本块来解决这个问题,但是我用了一个水平方向的文本块StackPanel来解决这个问题。这是一个更重的解决方案,因为涉及到更多的控件,但是可以工作。

ebdffaop

ebdffaop5#

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

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

anauzrmj6#

bottomRun.Text = "";

这个对我有用。👍

相关问题