DefaultItemsVisibilityConverter.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. using System.Collections;
  2. using System.Globalization;
  3. using System.Windows;
  4. using System.Windows.Data;
  5. using System.Windows.Markup;
  6. namespace Waaagh.Converters {
  7. public class DefaultContentVisibilityConverter: MarkupExtension, IValueConverter {
  8. public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
  9. // 默认使用 Hidden 作为不显示
  10. Visibility unvisibility = Visibility.Hidden;
  11. if (parameter is Visibility mode) {
  12. unvisibility = mode;
  13. }
  14. else if (parameter is bool isCollapsed && isCollapsed) {
  15. unvisibility = Visibility.Collapsed;
  16. }
  17. else if (parameter is string str && bool.TryParse(str, out isCollapsed) && isCollapsed) {
  18. unvisibility = Visibility.Collapsed;
  19. }
  20. // 任意类型为空, 显示默认内容
  21. if (value == null) {
  22. return Visibility.Visible;
  23. }
  24. // 集合类型且空集合, 显示默认内容
  25. if (value is ICollection collection && collection.Count == 0) {
  26. return Visibility.Visible;
  27. }
  28. return unvisibility;
  29. }
  30. public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
  31. throw new NotImplementedException();
  32. }
  33. public override object ProvideValue(IServiceProvider serviceProvider) {
  34. return this;
  35. }
  36. }
  37. }