在 wpf 中将文本转换为 ProperCase
Converting Text to ProperCase in wpf
我正在创建一个带有奇数文本框的 wpf 控件,我希望将其文本转换为正确的大小写。
为此我创建了一个转换器;
Public Class TextToPropperCaseConverter
Implements IValueConverter
Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As Globalization.CultureInfo) As Object Implements IValueConverter.Convert
Dim txt As String = TryCast(parameter, String)
If Not String.IsNullOrEmpty(txt) Then
Return StrConv(txt, VbStrConv.ProperCase)
Else
Return txt.ToString
End If
End Function
Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As Globalization.CultureInfo) As Object Implements IValueConverter.ConvertBack
Return Nothing
End Function
End Class
然后继续参考我的 xaml 中的相关文本框,就像这样;
<wizard:AeroWizardWindow.Resources>
<local:TextToPropperCaseConverter x:Key="txtToPcase"/>
</wizard:AeroWizardWindow.Resources>
<TextBox Grid.Column="1" HorizontalAlignment="Left" Height="62" Margin="8,8,0,0" Grid.Row="1" TextWrapping="Wrap" Text="{Binding Address, Converter={StaticResource txtToPcase}}" AcceptsReturn="True" VerticalAlignment="Top" Width="232"/>
也许我天真地希望文本框中输入的文本随着用户键入而改变,或者随着控件失去焦点而改变,但什么也没发生。
这是执行此操作的正确方法吗,或者尽管我正在使用 MVVM 并试图避免代码隐藏,但这是一个代码隐藏实际上更好的经典示例?
非常感谢
如果您想实现从用户输入到 ViewModel
属性 的转换,您需要实现 ConvertBack
。另请参阅 documentation。您 return Nothing
,这意味着无论您在 TextBox
中键入什么,Nothing
将始终是使用转换器的结果值。
我正在创建一个带有奇数文本框的 wpf 控件,我希望将其文本转换为正确的大小写。
为此我创建了一个转换器;
Public Class TextToPropperCaseConverter
Implements IValueConverter
Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As Globalization.CultureInfo) As Object Implements IValueConverter.Convert
Dim txt As String = TryCast(parameter, String)
If Not String.IsNullOrEmpty(txt) Then
Return StrConv(txt, VbStrConv.ProperCase)
Else
Return txt.ToString
End If
End Function
Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As Globalization.CultureInfo) As Object Implements IValueConverter.ConvertBack
Return Nothing
End Function
End Class
然后继续参考我的 xaml 中的相关文本框,就像这样;
<wizard:AeroWizardWindow.Resources>
<local:TextToPropperCaseConverter x:Key="txtToPcase"/>
</wizard:AeroWizardWindow.Resources>
<TextBox Grid.Column="1" HorizontalAlignment="Left" Height="62" Margin="8,8,0,0" Grid.Row="1" TextWrapping="Wrap" Text="{Binding Address, Converter={StaticResource txtToPcase}}" AcceptsReturn="True" VerticalAlignment="Top" Width="232"/>
也许我天真地希望文本框中输入的文本随着用户键入而改变,或者随着控件失去焦点而改变,但什么也没发生。
这是执行此操作的正确方法吗,或者尽管我正在使用 MVVM 并试图避免代码隐藏,但这是一个代码隐藏实际上更好的经典示例?
非常感谢
如果您想实现从用户输入到 ViewModel
属性 的转换,您需要实现 ConvertBack
。另请参阅 documentation。您 return Nothing
,这意味着无论您在 TextBox
中键入什么,Nothing
将始终是使用转换器的结果值。