【问题标题】:How to make a TextBox hold text when app is shut down and restarted using user settings如何在应用程序关闭并使用用户设置重新启动时使 TextBox 保存文本
【发布时间】:2013-03-04 13:42:28
【问题描述】:

在开始我的问题之前,我已经阅读了有关该主题的所有可以想象的链接,但我仍然陷入困境。

我正在使用 C# 和 Visual Studio 组合一个 WPF。当应用程序关闭并重新启动时,我希望 TextBox 在其中保留文本,并且文本是读/写的,因为文本会经常更改。

我已经设置了一个新的 .settings 文件,并将它放在我项目的 Properties 文件夹中。我使用漂亮的网格创建了这个,我可以在其中创建名称、类型和值等。

到目前为止,几个小时后,我想我离得更近了,但不确定。这是 Designer.cs -

namespace PRX.Properties {


    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
    internal sealed partial class saveData : global::System.Configuration.ApplicationSettingsBase {

        private static saveData defaultInstance = ((saveData)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new saveData())));

        public static saveData Default {
            get {
                return defaultInstance;
            }
        }

        [global::System.Configuration.UserScopedSettingAttribute()]
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
        [global::System.Configuration.DefaultSettingValueAttribute("mainSource")]
        public string Setting {
            get {
                return ((string)(this["Setting"]));
            }
            set {
                this["Setting"] = value;
            }
        }
    }
}

.settings 文件名为 saveData.settings,我将表设置为名称:设置,类型:字符串,值:mainSource。范围设置为用户。它位于 Properties 文件夹中,就像默认的 Settings.settings 文件一样。

问题中的文本框是这样连接的:

                        <ScrollViewer VerticalScrollBarVisibility="Auto">
                            <TextBox DockPanel.Dock="Top" Margin="10" Background="Black" Name="tb1" TextWrapping="Wrap" AcceptsReturn="True" Text="{Binding Source={x:Static p:saveData.Default}, Path=Default.Setting, Mode=TwoWay}"></TextBox>

                        </ScrollViewer>

下面是它在 app.config 中的样子:

  <PRX.saveData>
   <setting name="Setting" serializeAs="String">
    <value>mainSource</value>
   </setting>
  </PRX.saveData>
 </userSettings>

我知道它已连接到 .Settings 文件,因为当我调试时,文本框中存在值“mainSource”

我已经阅读了十几个关于该主题的链接,但最值得注意的是这两个:

http://blogs.msdn.com/b/patrickdanino/archive/2008/07/23/user-settings-in-wpf.aspx http://msdn.microsoft.com/en-us/library/k4s6c3a0.aspx

我对此特别困惑,我正在阅读的文档似乎非常简单,但我似乎无法掌握它。非常感谢任何帮助。谢谢

【问题讨论】:

    标签: wpf database data-binding


    【解决方案1】:

    问题是你没有在你的设置上调用“Save()”,为什么它没有被保留,你可以尝试在窗口初始化时加载文本并在退出时将其保存到设置中,你必须调用 Save( ) 以保持您的设置

    编辑

    正如您所说,文本框已连接到设置但未保存更改,为此您必须在设置上调用“保存”,并且在哪里执行此操作都没有关系,例如,您可以为文本添加处理程序改变:

        <TextBox DockPanel.Dock="Top" Margin="10" Background="Black" Name="tb1" TextWrapping="Wrap" AcceptsReturn="True" Text="{Binding Source={x:Static p:saveData.Default}, Path=Default.Setting, Mode=TwoWay} TextChanged="tb1_TextChanged""></TextBox>
    

    并将处理程序添加到后面的代码中:

        private void tb1_TextChanged(object sender, TextChangedEventArgs e)
        {
            Properties.saveData.Default.Save();
        }
    

    检查此链接: http://blogs.msdn.com/b/patrickdanino/archive/2008/07/23/user-settings-in-wpf.aspx Best way to bind WPF properties to ApplicationSettings in C#?

    【讨论】:

    • 嗯,现在这是我在这一切中缺少的东西。这是 .cs 文件中 TextBox 的属性吗?是的......我对这一切都很陌生,而且还在学习中
    • 不,这与设置有关。只需转到文本框所在的窗口即可。为退出事件添加事件处理程序输入以下代码:Properties.saveData.Default.Setting.Save();
    • 还要确保传播您的更改,例如将“UpdateSourceTrigger=PropertyChanged”添加到 Xaml 中的绑定
    • 嘿,非常感谢您抽出宝贵时间帮助我。我能够弄清楚这一点:还要确保传播您的更改,例如将“UpdateSourceTrigger=PropertyChanged”添加到 Xaml 中的绑定,但是我不确定如何执行此部分:不,这与设置有关。只需转到文本框所在的窗口即可。为退出事件添加事件处理程序输入以下代码:Properties.saveData.Default.Setting.Save();
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    • 2014-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多