2011-11-06 50 views
1

我正在創建一個wpf應用程序。我必須把所有的文本框首字母大寫,如果用戶輸入小,那麼它應該用鼠標大寫格式化。我需要最好的方式來做到這一點,請別人幫助我。自動大寫文本框中的第一個字母

回答

3

極大地做它的最佳方法取決於你如何做你的應用程序,但@ H.B.的答案很可能是要走的路。
爲了完整起見,另一種方式,如果這樣做是使用像這樣的轉換器:

<!-- Your_Window.xaml --> 
<Window x:Class="..." 
     ... 
     xmlns:cnv="clr-namespace:YourApp.Converters"> 
    <Window.Resources> 
    <cnv.CapitalizeFirstLetterConverter x:Key="capFirst" /> 
    </Window.Resources> 
    ... 
    <TextBox Text="{Binding Path=SomeProperty, Converter={StaticResource capFirst}}" /> 

這裏假設你的窗口的數據上下文設置爲具有讀取一個類的實例/寫名爲類型爲字符串的SomeProperty的屬性。 轉換器本身將是這樣的:

// CapitalizeFirstLetterConverter.cs 
using System; 
using System.Data; 
using System.Globalization; 
namespace YourApp.Converters { 
    [ValueConversion(typeof(string), typeof(string))] 
    public class CapitalizeFirstLetterConverter : IValueConverter { 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { 
     // this will be called after getting the value from your backing property 
     // and before displaying it in the textbox, so we just pass it as-is 
     return value; 
    } 
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { 
     // this will be called after the textbox loses focus (in this case) and 
     // before its value is passed to the property setter, so we make our 
     // change here 
     if (value is string) { 
     var castValue = (string)value; 
     return char.ToUpper(castValue[0]) + castValue.Substring(1); 
     } 
     else { 
     return value; 
     } 
    } 
    } 
} 

您可以瞭解更多有關轉換器here

+0

謝謝老兄,我一直在尋找somethink這樣............ – Anu

+2

此外,在文本綁定,如果你把'UpdateSourceTrigger = PropertyChanged',該轉換器將運行而不是當TextBox失去焦點時。 –

1

您可以將樣式放入Application.Resources以處理所有TextBoxes上的LostFocus,那麼您只需相應地更改Text屬性。

<!-- App.xaml - Application.Resources --> 
<Style TargetType="{x:Type TextBox}"> 
    <EventSetter Event="LostFocus" Handler="TextBox_LostFocus" /> 
</Style> 
// App.xaml.cs - App 
private void TextBox_LostFocus(object sender, RoutedEventArgs e) 
{ 
    var tb = (TextBox)sender; 
    if (tb.Text.Length > 0) 
    { 
     tb.Text = Char.ToUpper(tb.Text[0]) + tb.Text.Substring(1); 
    } 
} 
相關問題