您根本不需要修改 TextBox 的值!在代码中你只需要修改你的相关值(ShortCutText)你也可以设置你的 TextBox 的IsReadOnly =" True " 属性。
<TextBox Text="{Binding Path=ShortCutText,Mode=OneWay}"
KeyDown="TextBox_KeyDown" IsReadOnly="True"/>
您应该在您的类中实现INotifyPropertyChanged接口,如 MSDN 中所述:
http://msdn.microsoft.com/library/system.componentmodel.inotifypropertychanged.aspx
修改ShortCutText属性的设置器(您的TextBox绑定到的):
class MyClass:INotifyPropertyChanged
{
string shortCutText="Alt+A";
public string ShortCutText
{
get { return shortCutText; }
set
{
shortCutText=value;
NotifyPropertyChanged("ShortCutText");
}
}
public event PropertyChangedEventHandler PropertyChanged;
void NotifyPropertyChanged( string props )
{
if( PropertyChanged != null )
PropertyChanged( this , new PropertyChangedEventArgs( prop ) );
}
}
WPF 将自动订阅 PropertyChanged 事件。现在使用TextBox 的KeyDown事件,例如,像这样:
private void TextBox_KeyDown( object sender , KeyEventArgs e )
{
ShortCutText =
( e.KeyboardDevice.IsKeyDown( Key.LeftCtrl )? "Ctrl+ " : "" )
+ e.Key.ToString( );
}