我的文本块包含2个Run
标记和一个Linebreak
:
<TextBlock>
<Run Text="TopText"/>
<LineBreak/>
<Run x:Name="bottomRun" Text="Bottom text"/>
</TextBlock>
我想隐藏代码中的第二个Run
标记。但是没有Visible
属性......为什么会这样?
如何仅隐藏一个Run
标记的最佳解决方案是什么?
答案 0 :(得分:9)
Visibility
是UIElement
类中的属性,所有UI控件都是从该属性派生的,但Run
并非来自它。
您可以做的最好的事情是在后面的代码中将Text
属性设置为String.Empty
:
bottomRun.Text = String.Empty;
答案 1 :(得分:4)
你得到的TextBlock非常小。当遇到类似情况时,我复制它并绑定TextBlock上的Visiblity属性。
if (x > 0) {
System.out.println("positive ");
} else if (x == 0) {
System.out.println("zero ");
} else {
System.out.println("negative");
}
转换器适当声明,定义并采用“反转”参数。
答案 2 :(得分:1)
有时这是合适的 - 但如果你真的需要文字来运行,那就不理想了。并且您希望在内联元素中具有自动换行符。
<TextBlock>
<InlineUIElement><TextBlock Visibility="Collapsed" Text="TopText"/></InlineUIElement>
<LineBreak/>
<Run x:Name="bottomRun" Text="Bottom text"/>
</TextBlock>
答案 3 :(得分:1)
我知道OP希望使用带有运行的单个TextBlock来解决这个问题,但我解决了TextBlocks的水平方向StackPanel的问题。这是一个更重的解决方案,因为涉及更多控件,但有效。
答案 4 :(得分:1)
您可以使用带有绑定的样式触发器:
<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>