C# Windows XAML:替换WPF文本框';s字符外壳

C# Windows XAML:替换WPF文本框';s字符外壳,c#,xaml,user-interface,windows-store-apps,converter,C#,Xaml,User Interface,Windows Store Apps,Converter,我有一个文本框,每当用户输入时,我希望文本仅为大写。例如,如果我键入“abc”,则文本框和后端绑定中的实际文本应为“abc” 在WPF中有CharacterCasing属性,但我在WindowsXAML(或任何你称之为Windows8应用程序的东西)中似乎找不到 我试着做一个转换器,但似乎不起作用: 转换器: public class UpperCaseConverter : IValueConverter { public object Convert(object value, T

我有一个文本框,每当用户输入时,我希望文本仅为大写。例如,如果我键入“abc”,则文本框和后端绑定中的实际文本应为“abc”

在WPF中有CharacterCasing属性,但我在WindowsXAML(或任何你称之为Windows8应用程序的东西)中似乎找不到

我试着做一个转换器,但似乎不起作用:

转换器:

 public class UpperCaseConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        return value.ToString().ToUpper();
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        return value.ToString().ToUpper();
    }
}
<TextBox Text="{Binding ElementName=uiMainPage, Path=Company, Mode=TwoWay, Converter={StaticResource ToUpper}}"/>
XAML:

 public class UpperCaseConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        return value.ToString().ToUpper();
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        return value.ToString().ToUpper();
    }
}
<TextBox Text="{Binding ElementName=uiMainPage, Path=Company, Mode=TwoWay, Converter={StaticResource ToUpper}}"/>

这是我在VB.Net中为它编写的代码,但它应该很容易翻译成C#

为您的文本框创建一个
textchanged
事件,并调用一个方法,将您的
sender
作为
textbox

Private Sub AnyTextBox_TextChanged(sender As Object, e As TextChangedEventArgs) 
    TextBoxToChange = (CType(sender,Textbox))
    TextBoxToChange.Text = TextBoxToChange.Text.ToUpper()
    TextBoxToChange.SelectionStart = TextBoxToChange.Text.Length
End Sub
TextChanged
事件接受
textbox
并将文本更改为
uppercase
selectionstart
用于停止选择
textbox
返回到0,从而导致向后写入)

您将拥有如下所示的XAML

<TextBox x:Name="txtTest1"
         TextChanged="AnyTextBox_TextChanged"/>

<TextBox x:Name="txtTest2"
         TextChanged="AnyTextBox_TextChanged"/>


它并不像你所希望的那样是一个转换器,但它可以很好地完成这项任务,而且每个
页面只有一个方法

你所说的“似乎不起作用”是什么意思?请注意,这不应该是双向的,因为您无法从全大写字符串还原原始字符串。它对文本没有任何作用。我被你的最后一句话弄糊涂了,你能详细解释一下吗?@kennyzx我希望这是通用的,这样我就可以在多个地方使用它,比如转换器。有办法吗?我是这方面的一个新手……这能不能变得更通用一些,像一个转换器,我可以在任何有参考资料的地方使用。但是有了这个,我就必须为我的每一堂课做好准备。不酷的重复代码…@ARandomGuy我已经编辑了我的帖子,使得你每页只需要一个方法。这是我所能做的最好的了,因为我不熟悉你想要的转换器。@ARandomGuy这是一段如此小的代码,如果它是重复的,应该一点也不重要。当然,这并不理想,但避免每个表单重复3行代码是不值得的