将UIControl与设置

时间:2017-08-24 13:49:20

标签: c# wpf generics settings

首先,我基本上是一名C ++开发人员。我习惯通过元编程来编写类来自动化所有东西。今天我有了从设置与UIElements自动化同步的想法。

问题1:类似的项目是否已存在?

如果没有:我不搜索完成的解决方案,我需要想法提示如何解决我的任务或让我远离糟糕的想法

起初我想要同步:

  • TextBox< - > string
  • Checkbox< - > bool

我的推荐人

  1. 使用扩展程序:

    public static class TextBoxSynchroniseExtension
    {
        public static string load(this TextBox control, string propertyName)
        {
            string value = Properties.Settings.Default[propertyName].ToString();
            control.Text = value;
            return value;
        }
        public static string save(this TextBox control, string propertyName)
        {
            string value = control.Text;
            Properties.Settings.Default[propertyName] = value;
            return value;
        }
    }
    

    缺点:

    • 我每次都需要提供属性名称。
    • 对于更多的UIElements,我必须写一个新的扩展名。
  2. 覆盖UIElements:

    (未测试的)

    public partial class SyncSettingsTextBox : TextBox
    {
        [Description("The name for synchronise with the settings."), Category("Data")]
        public string SettingsName{ get; set; }
    
        public SyncSettingsTextBox(string settingsName) : base()
        {
            this.SettingsName = settingsName;
            LoadFromSettings();
        }
    
        public void LoadFromSettings()
        {
            this.Text = Properties.Settings.Default[SettingsName].ToString();
        }
        public void saveToSettings()
        {
            Properties.Settings.Default[SettingsName] = this.Text;
        }
    }
    
  3. 通过传递属性名称和设置名称来创建通用UserControl来存储他的孩子。

    伪代码:

    <StackPanel>
        <SynchroniseWrapper SettingsName="Name" PropertyName="Text" >
            <TextBox Text="I get overrided from Properties.Settings.Default.Name" />
        </SynchroniseWrapper>
        <SynchroniseWrapper SettingsName="PWD" PropertyName="Password" >
            <PasswordBox />
        </SynchroniseWrapper>
        <SynchroniseWrapper SettingsName="AutoLogin" PropertyName="IsChecked" >
            <CheckBox IsChecked="False" Content="Remember me?" />
        </SynchroniseWrapper>
    </StackPanel
    
  4. 问题2:我必须查找哪些关键字才能创建此类UserControls

0 个答案:

没有答案