2014-12-25 4 views
0

У меня есть элемент управления Expander WPF, шаблон которого является простым текстовым блоком. Я хочу скрыть весь расширитель, если 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

Использование привязки к имени свойства Expander видимости с собственным преобразователем

 <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 решило проблему. –

 Смежные вопросы

  • Нет связанных вопросов^_^