【问题标题】:With WPF, how to collapse a TextBlock depending on the content of its child TextBlock?使用 WPF,如何根据子 TextBlock 的内容折叠 TextBlock?
【发布时间】:2010-10-20 01:26:41
【问题描述】:

我必须显示一大堆属性/值。我的问题是所有这些属性都没有值,所以我不想在这种情况下显示这些。

使用一些代码会更容易理解我的问题:

<StackPanel DataContext=...>
<TextBlock>Info1:<TextBlock Text={Binding Path=Info1} /></TextBlock>
<TextBlock>Info2:<TextBlock Text={Binding Path=Info2} /></TextBlock>
<TextBlock>Info3:<TextBlock Text={Binding Path=Info3} /></TextBlock>
</StackPanel>

基本上,根据子TextBlock的内容,我想折叠父TextBlock。我的想法是使用适用于所有 TextBlock 的样式并检查内容,如果没有,则折叠父级...不幸的是,我无法从 DataTrigger 访问父级。可能你会有一个比这更简洁的解决方案:)

非常感谢您的帮助!

【问题讨论】:

    标签: .net wpf data-binding .net-3.5


    【解决方案1】:

    您可以使用简单的转换器将外部文本块的可见性绑定到内部文本块的文本:

    <TextBlock Name="outer1" 
               Visibility="{Binding ElementName=inner1, Path=Text, Converter={StaticResource MyConverter}}">
        Info1:<TextBlock Name="inner1" Text="{Binding Path=Info1}" />
    </TextBlock>
    

    或将外部文本块的可见性直接绑定到 Info1:

     <TextBlock Visibility="{Binding Path=Info1, Converter={StaticResource MyConverter}}">
        Info1:<TextBlock Text="{Binding Path=Info1}" />
    </TextBlock>
    

    【讨论】:

      【解决方案2】:

      如果您在模板或样式中,则可以使用触发器来设置外部文本块的可见性。

      例如DataTemplate:

      <DataTemplate.Triggers>
          <DataTrigger Binding="{Binding Path=Info1}" Value="">
              <Setter Property="Visibility" TargetName="pnlInfo1" Value="Hidden" />
          </DataTrigger>
          <!-- and so on ... -->
      </DataTemplate.Triggers>
      

      根据您的需要调整触发器。例如,当它是 null 时,您可以隐藏它,或者使用 gcores 建议的转换器来进行更多花哨的检查。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多