2014-12-25 50 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解決了這個問題。 –