隐藏<;运行/>;TextBlock中的标记-WPF
我有两个隐藏<;运行/>;TextBlock中的标记-WPF,wpf,Wpf,我有两个Run标记和一个Linebreak标记的文本块: <TextBlock> <Run Text="TopText"/> <LineBreak/> <Run x:Name="bottomRun" Text="Bottom text"/> </TextBlock> 我想在代码隐藏中隐藏第二个Run标记。但是没有可见的属性。。。为什么会这样? 如何只隐藏一个Run标记的最佳解决方案是什么
Run
标记和一个Linebreak
标记的文本块:
<TextBlock>
<Run Text="TopText"/>
<LineBreak/>
<Run x:Name="bottomRun" Text="Bottom text"/>
</TextBlock>
我想在代码隐藏中隐藏第二个Run
标记。但是没有可见的属性。。。为什么会这样?
如何只隐藏一个
Run
标记的最佳解决方案是什么?Visibility
是UIElement
类中的属性,所有UI控件都从该类派生,但Run
不是从该类派生的
您最好将文本
属性设置为字符串。代码隐藏中为空
:
bottomRun.Text = String.Empty;
有时这是合适的,但如果您确实需要“运行”文本,并且希望在内联元素中有一个自动换行符,则这并不理想
<TextBlock>
<InlineUIElement><TextBlock Visibility="Collapsed" Text="TopText"/></InlineUIElement>
<LineBreak/>
<Run x:Name="bottomRun" Text="Bottom text"/>
</TextBlock>
您得到的文本块非常小。当遇到类似情况时,我复制了它并将Visiblity属性绑定到TextBlock上
<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”参数。我知道OP想要使用一个包含运行的单个TextBlock来解决这个问题,但我用一个水平方向的TextBlock StackPanel解决了这个问题。这是一个较重的解决方案,因为涉及到更多控件,但可以工作。您可以使用绑定进行用户风格的触发:
<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>
@tofutim它确实很时尚。但是您不能以样式覆盖直接在对象中设置的内容;您只需要在样式中设置值,然后在样式内的触发器中覆盖它。@ANeves-确定吗?因为如上所述,Run
没有任何与之相关联的属性Visibility
,那么如何从Style设置它呢?RohitVas,我没有写任何关于Visibility的内容。你误解了吗?如果不是,请重写您的评论好吗?值得指出的是,
必须是
的孩子。