WPF技巧-常用的Converter集合(更新ing)
文章目录
- @[toc]
- 🧩 示例 1:`BooleanToVisibilityConverter`
- 🧩 示例 2:`InvertedBooleanToVisibilityConverter`
- 🧩 示例 3:`StringToColorConverter`
- 🧩 示例 4:`StringToBrushConverter`
- 🧩 示例 5:`NullToVisibilityConverter`
- 🧩 示例 6:`EnumToVisibilityConverter`
- 🧩 示例 7:`DoubleToOpacityConverter`
- ✅ 注册与使用方式(XAML)
- 1. 在资源中注册:
- 2. 在绑定中使用:
文章目录
- @[toc]
- 🧩 示例 1:`BooleanToVisibilityConverter`
- 🧩 示例 2:`InvertedBooleanToVisibilityConverter`
- 🧩 示例 3:`StringToColorConverter`
- 🧩 示例 4:`StringToBrushConverter`
- 🧩 示例 5:`NullToVisibilityConverter`
- 🧩 示例 6:`EnumToVisibilityConverter`
- 🧩 示例 7:`DoubleToOpacityConverter`
- ✅ 注册与使用方式(XAML)
- 1. 在资源中注册:
- 2. 在绑定中使用:
🧩 示例 1:BooleanToVisibilityConverter
将布尔值转换为 Visibility
(如 true => Visible
, false => Collapsed
)
public class BooleanToVisibilityConverter : IValueConverter
{public object Convert(object value, Type targetType, object parameter, CultureInfo culture){if (value is bool booleanValue)return booleanValue ? Visibility.Visible : Visibility.Collapsed;return Visibility.Collapsed;}public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){if (value is Visibility visibility)return visibility == Visibility.Visible;return false;}
}
🧩 示例 2:InvertedBooleanToVisibilityConverter
反向布尔转可见性(true => Collapsed
, false => Visible
)
public class InvertedBooleanToVisibilityConverter : IValueConverter
{public object Convert(object value, Type targetType, object parameter, CultureInfo culture){if (value is bool booleanValue)return !booleanValue ? Visibility.Visible : Visibility.Collapsed;return Visibility.Visible;}public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){if (value is Visibility visibility)return visibility != Visibility.Visible;return true;}
}
🧩 示例 3:StringToColorConverter
将字符串转换为 Color
(支持 Hex、Named 等格式)
public class StringToColorConverter : IValueConverter
{public object Convert(object value, Type targetType, object parameter, CultureInfo culture){if (value is string colorStr){try{return (Color)ColorConverter.ConvertFromString(colorStr);}catch { }}return Colors.Transparent;}public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){if (value is Color color)return color.ToString();return string.Empty;}
}
🧩 示例 4:StringToBrushConverter
将字符串转换为 Brush
(支持 Hex、Named)
public class StringToBrushConverter : IValueConverter
{public object Convert(object value, Type targetType, object parameter, CultureInfo culture){if (value is string brushStr){try{return new SolidColorBrush((Color)ColorConverter.ConvertFromString(brushStr));}catch { }}return Brushes.Transparent;}public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){if (value is SolidColorBrush brush)return brush.Color.ToString();return string.Empty;}
}
🧩 示例 5:NullToVisibilityConverter
将 null 或空对象转换为 Visibility(非空显示,为空隐藏)
public class NullToVisibilityConverter : IValueConverter
{public object Convert(object value, Type targetType, object parameter, CultureInfo culture){return value == null || value is string str && string.IsNullOrEmpty(str)? Visibility.Collapsed: Visibility.Visible;}public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){throw new NotImplementedException();}
}
🧩 示例 6:EnumToVisibilityConverter
根据枚举值是否匹配某个参数来决定是否显示
public class EnumToVisibilityConverter : IValueConverter
{public object Convert(object value, Type targetType, object parameter, CultureInfo culture){if (value == null || parameter == null)return Visibility.Collapsed;return value.ToString() == parameter.ToString()? Visibility.Visible: Visibility.Collapsed;}public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){if (value is Visibility visible && visible == Visibility.Visible && parameter != null)return parameter;return Binding.DoNothing;}
}
XAML 使用:
<TextBlock Text="Only shown when Status is Active"Visibility="{Binding Status, Converter={StaticResource EnumToVisibilityConverter}, ConverterParameter=Active}" />
🧩 示例 7:DoubleToOpacityConverter
将数值映射为透明度(0.0 - 1.0)
public class DoubleToOpacityConverter : IValueConverter
{public object Convert(object value, Type targetType, object parameter, CultureInfo culture){if (value is double opacity)return opacity >= 0 && opacity <= 1 ? opacity : 1.0;return 1.0;}public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){if (value is double opacity)return opacity;return 1.0;}
}
✅ 注册与使用方式(XAML)
1. 在资源中注册:
<Window.Resources><converters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" /><converters:StringToBrushConverter x:Key="StringToBrushConverter" /><!-- 其他转换器 -->
</Window.Resources>
2. 在绑定中使用:
<Button Content="Toggle" Visibility="{Binding IsEnabled, Converter={StaticResource BooleanToVisibilityConverter}}" /><TextBlock Text="Colored Text"Foreground="{Binding TextColor, Converter={StaticResource StringToBrushConverter}}" />