文章目录
文章目录
🧩 示例 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}}" />