2014-12-25 21 views
0

我有一个扩展器WPF控件,哪个标头的模板是​​一个简单的TextBlock。如果TextBlock.Text(从外部动态填充)为空或空,我想隐藏整个扩展器。如果标头为空,则隐藏整个扩展器

<Expander> 
    <Expander.Header> 
     <TextBlock Text="{Binding Path=Name}"/> 
    </Expander.Header> 
</Expander> 

回答

0

你可以参考这个例子。 Hide Expander ToggleButton if no child items in WPF

的Xaml

<ListBox x:Name="lstbx"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Expander x:Name="exp"> 
       <Expander.Header> 
        <TextBlock Text="{Binding Path=Name}"></TextBlock> 
       </Expander.Header> 
       <Expander.Style> 
        <Style TargetType="Expander">       
         <Style.Triggers> 
          <DataTrigger Binding="{Binding Path=Name}" Value="{x:Null}"> 
           <Setter Property="Visibility" Value="Collapsed"/> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
       </Expander.Style> 
      </Expander> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

C#

 public Window1() 
    { 
     InitializeComponent(); 
     List<HeaderList> lst = new List<HeaderList>(); 
     lst.Add(new HeaderList(){Name= "Header1"}); 
     lst.Add(new HeaderList() { Name = "Header2" }); 
     lst.Add(new HeaderList() { }); 
     lst.Add(new HeaderList() { Name = "Header4" }); 
     lst.Add(new HeaderList() { }); 
     lst.Add(new HeaderList() { }); 
     lst.Add(new HeaderList() { Name = "Header7" }); 
     this.DataContext = this; 
     lstbx.ItemsSource = lst;  
    } 
} 
public class HeaderList 
{ 
    public string Name { get; set; } 
} 

结果

enter image description here

0

使用绑定到Name属性膨胀机可视性自己的转换器

 <Expander Visibility="{Binding Path=Name, Converter={StaticResource EmptyStringToVisibility}}"> 
      <Expander.Header> 
       <TextBlock Text="{Binding Path=Name}"/> 
      </Expander.Header> 
     </Expander> 

转换器,例如:

class EmptyStringToVisibility : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      return String.IsNullOrEmpty(value as string) ? Visibility.Collapsed : Visibility.Visible; 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      throw new NotImplementedException(); 
     } 
    } 
+0

这是很奇怪,但这种直接的解决方案并不为我工作。用DataTrigger向TextBox添加样式到Expander解决了这个问题。 –