ValueConverters.NET,WPF转换器应用
ValueConverters.NET 是一个功能丰富的转换器库,让我详细介绍它的主要功能和使用方法。
1. 安装包
Install-Package ValueConverters.NET
2. 常用转换器和示例
BoolToValueConverter (布尔值转换器)
<Window.Resources>
<!-- 布尔值转可见性 -->
<conv:BoolToValueConverter x:Key="boolToVisibility"
TrueValue="Visible"
FalseValue="Collapsed"/>
<!-- 布尔值转颜色 -->
<conv:BoolToValueConverter x:Key="boolToColor"
TrueValue="Green"
FalseValue="Red"/>
</Window.Resources>
<StackPanel>
<TextBlock Text="状态指示器"
Visibility="{Binding IsActive,
Converter={StaticResource boolToVisibility}}"/>
<Border Background="{Binding IsValid,
Converter={StaticResource boolToColor}}"/>
</StackPanel>
EnumToValueConverter (枚举转换器)
<Window.Resources>
<conv:EnumToValueConverter x:Key="enumToColor" DefaultValue="Gray">
<conv:EnumToValueConverter.Mappings>
<conv:EnumMapping EnumValue="Active" Value="Green"/>
<conv:EnumMapping EnumValue="Inactive" Value="Red"/>
<conv:EnumMapping EnumValue="Pending" Value="Yellow"/>
</conv:EnumToValueConverter.Mappings>
</conv:EnumToValueConverter>
</Window.Resources>
<ListBox ItemsSource="{Binding Items}">
<ListBox.ItemTemplate>
<DataTemplate>
<Border Background="{Binding Status,
Converter={StaticResource enumToColor}}">
<TextBlock Text="{Binding Name}"/>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
DateTimeConverter (日期时间转换器)
<Window.Resources>
<conv:DateTimeConverter x:Key="dateConverter"
Format="yyyy-MM-dd"/>
<conv:DateTimeConverter x:Key="timeConverter"
Format="HH:mm:ss"/>
</Window.Resources>
<StackPanel>
<TextBlock Text="{Binding CreatedDate,
Converter={StaticResource dateConverter}}"/>
<TextBlock Text="{Binding UpdateTime,
Converter={StaticResource timeConverter}}"/>
</StackPanel>
MathConverter (数学运算转换器)
<Window.Resources>
<conv:MathConverter x:Key="mathConverter"/>
</Window.Resources>
<StackPanel>
<!-- 加法运算 -->
<TextBlock Text="{Binding Value,
Converter={StaticResource mathConverter},
ConverterParameter=x+10}"/>
<!-- 乘法运算 -->
<TextBlock Text="{Binding Width,
Converter={StaticResource mathConverter},
ConverterParameter=x*0.5}"/>
</StackPanel>
MultiValueConverter (多值转换器)
<Window.Resources>
<conv:MultiValueConverter x:Key="loginValidator"
ConverterType="And"/>
</Window.Resources>
<Button Content="登录" IsEnabled="{Binding}">
<Button.DataContext>
<MultiBinding Converter="{StaticResource loginValidator}">
<Binding Path="HasUsername"/>
<Binding Path="HasPassword"/>
<Binding Path="IsNotBusy"/>
</MultiBinding>
</Button.DataContext>
</Button>
StringToValueConverter (字符串转换器)
<Window.Resources>
<conv:StringToValueConverter x:Key="stringToDouble"
TargetType="Double"
FallbackValue="0"/>
</Window.Resources>
<TextBox Text="{Binding Amount,
Converter={StaticResource stringToDouble}}"/>
3. 高级用法
组合转换器
<Window.Resources>
<!-- 组合多个转换器 -->
<conv:ValueConverterGroup x:Key="complexConverter">
<conv:BoolToValueConverter TrueValue="1" FalseValue="0"/>
<conv:MathConverter ConverterParameter="x*100"/>
<conv:StringToValueConverter TargetType="String"
Format="{0}%"/>
</conv:ValueConverterGroup>
</Window.Resources>
<TextBlock Text="{Binding IsComplete,
Converter={StaticResource complexConverter}}"/>
带参数的转换器
<conv:EnumToValueConverter x:Key="enumToBrush">
<conv:EnumToValueConverter.Mappings>
<conv:EnumMapping EnumValue="Normal">
<conv:EnumMapping.Value>
<LinearGradientBrush>
<GradientStop Color="LightGreen" Offset="0"/>
<GradientStop Color="Green" Offset="1"/>
</LinearGradientBrush>
</conv:EnumMapping.Value>
</conv:EnumMapping>
<!-- 其他映射... -->
</conv:EnumToValueConverter.Mappings>
</conv:EnumToValueConverter>
4. 实用技巧
- 使用 FallbackValue 和 TargetNullValue:
<TextBlock Text="{Binding Score,
Converter={StaticResource numberConverter},
FallbackValue='N/A',
TargetNullValue='--'}"/>
- 调试转换:
<conv:DebugConverter x:Key="debugConverter"/>
<!-- 在转换过程中输出调试信息 -->
- 条件格式化:
<Style TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Value="True">
<DataTrigger.Binding>
<Binding Path="Value"
Converter="{StaticResource thresholdConverter}"
ConverterParameter="100"/>
</DataTrigger.Binding>
<Setter Property="Foreground" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
这个包的优点是:
- 转换器种类丰富
- 使用方便灵活
- 支持链式转换
- 提供良好的错误处理
- 性能优化
- 文档完善
建议根据实际需求选择合适的转换器,并善用组合转换器来处理复杂的转换逻辑。

浙公网安备 33010602011771号