0

(使用 WPF 应用程序/WPF 用户控件)

可以使用以下代码将文本从文本框中保存到全局字符串。

private void commentBox_TextChanged(object sender, TextChangedEventArgs e)
{
    Properties.Settings.Default.cmd01 = commentBox.Text;

    //always save on every input change??
    Properties.Settings.Default.Save();
}

但我现在想知道的是,在这种情况下,save每次文本更改都会调用 。所以如果我理解正确,它现在会保存在每个按下的键上。

我可以用更干净的方式做到这一点吗?例如,当用户离开文本框或其他东西的焦点时?

4

2 回答 2

1

正如您所建议的:订阅您的UIElement.LostFocus事件Keyboard.LostKeyboardFocus 附加事件TextBox并在那里进行保存。

private void commentBox_LostFocus(object sender, RoutedEventArgs e)
{
    Properties.Settings.Default.Save();
}

或者

private void commentBox_LostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
    Properties.Settings.Default.Save();
}
于 2012-04-07T18:41:08.180 回答
0

如果您打算使用 WPF,您不妨利用 Binding 基础设施来处理这类事情。您可以使用 LostFocus 的 UpdateSourceTrigger

XAML:

<TextBox Text="{Binding Path=Settings.Command01, 
                        Mode=OneWayToSource, 
                        UpdateSourceTrigger=LostFocus}" />

C#:

 public class BindableSettings : INotifyPropertyChanged
    {
         public string Command01
         {
                get { return Properties.Settings.Default.cmd01; }
                set 
                {
                      if (Properties.Settings.Default.cmd01 == value)
                           return;

                      NotifyPropertyChanged("Command01");
                }
         }

         public void NotifyPropertyChanged(string prop)
         {
             Properties.Settings.Default.Save();
             //Raise INPC event here...
         }

    }
于 2012-04-07T18:56:36.273 回答