我有2个Run标签和一个Linebreak的文本块:
Run
Linebreak
<TextBlock> <Run Text="TopText"/> <LineBreak/> <Run x:Name="bottomRun" Text="Bottom text"/> </TextBlock>
我想在代码后面隐藏第二个Run标签。但是没有Visible属性...为什么会这样?什么是最好的解决方案如何隐藏只有一个Run标签?
Visible
xam8gpfp1#
Visibility是UIElement类中的属性,所有UI控件都从该属性派生,但Run不从该属性派生。您最好在代码隐藏中将Text属性设置为String.Empty:
Visibility
UIElement
Text
String.Empty
bottomRun.Text = String.Empty;
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”参数。
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>
mznpcxlj4#
我知道OP想要用一个单独的文本块来解决这个问题,但是我用了一个水平方向的文本块StackPanel来解决这个问题。这是一个更重的解决方案,因为涉及到更多的控件,但是可以工作。
ebdffaop5#
有时候这是合适的--但如果你真的需要文本来“运行”,并且你想在内联元素中有一个自动换行符,这就不理想了。
<TextBlock> <InlineUIElement><TextBlock Visibility="Collapsed" Text="TopText"/></InlineUIElement> <LineBreak/> <Run x:Name="bottomRun" Text="Bottom text"/> </TextBlock>
anauzrmj6#
bottomRun.Text = "";
这个对我有用。👍
6条答案
按热度按时间xam8gpfp1#
Visibility
是UIElement
类中的属性,所有UI控件都从该属性派生,但Run
不从该属性派生。您最好在代码隐藏中将
Text
属性设置为String.Empty
:wmvff8tz2#
你得到的TextBlock非常小,当遇到类似的情况时,我复制了它,并在TextBlock上绑定了Visiblity属性。
转换器被适当地声明、定义并接受“invert”参数。
ig9co6j13#
您可以使用带绑定的样式触发器:
mznpcxlj4#
我知道OP想要用一个单独的文本块来解决这个问题,但是我用了一个水平方向的文本块StackPanel来解决这个问题。这是一个更重的解决方案,因为涉及到更多的控件,但是可以工作。
ebdffaop5#
有时候这是合适的--但如果你真的需要文本来“运行”,并且你想在内联元素中有一个自动换行符,这就不理想了。
anauzrmj6#
这个对我有用。👍