В моем приложении я хочу реализовать диалоговое окно параметров, как у вас в VisualStudios, если вы перейдете в Инструменты-> Параметры в строке меню. Как я могу это сделать? Моя первая идея заключалась в использовании страниц и навигации, но, возможно, есть более простой подход?Внедрение диалогового окна параметров
ответ
Это, вероятно, не Простой способ, но я написал этот фрагмент, который соответствует вашей цели, и это хорошее упражнение.
В пустом проекте Windows Forms добавьте ListBox (listBox1) и панель (панель1). Затем создайте 2 UserControls (UserControl1 и UserControl2), это будет содержимое, отображаемое при нажатии на список.
В классе Form1 мы создаем ListItem
класс, который будет содержать параметры меню, как например:
public partial class Form1 : Form
{
public class ListItem
{
public string Text { get; set; }
public UserControl Value { get; set; }
public ListItem(string text, UserControl value)
{
Text = text;
Value = value;
}
};
...
}
После этого вы добавляете элементы в ListBox сразу после InitializeComponent() в Form1:
public Form1()
{
InitializeComponent();
listBox1.DisplayMember = "Text";
listBox1.ValueMember = "Value";
listBox1.Items.Add(new ListItem("Item1", new UserControl1()));
listBox1.Items.Add(new ListItem("Item2", new UserControl2()));
}
Это сделает так, что при использовании listBox1.SelectedItem он вернет объект, который вы можете применить к ListItem, и получить доступ к связанному с ним UserControl.
Чтобы использовать это поведение, перейдите к designmode и дважды щелкните ListBox, это добавит код для события SelectedIndexChanged
. Мы используем это событие для отображения UserControl в панели panel1
. Это приведет к удалению старого содержимого панели и добавить выбранный UserControl:
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
panel1.Controls.Clear();
UserControl control = (listBox1.SelectedItem as ListItem).Value;
if(control != null)
{
panel1.Controls.Add(control);
control.Dock = DockStyle.Fill;
}
}
Я предлагаю вам попробовать добавить кнопку или что-то дифференцировать UserControls и играть вокруг. Повеселись! :)
. Тем временем я решил использовать tabControl. Но ваш подход звучит неплохо. Я буду помнить об этом. – ooorndtski
Вы должны создать новое окно и показать, что в отличие от создания страницы и перехода к ней. Затем вы должны позвонить .show()
в новое окно, чтобы он показывал.
Тогда вы измените внешний вид нового окна, как хотите, так же, как и страницы редактирования.
Если вы строите ваши варианты в полной объектной модели, которая соответствует структуре окна настроек, то лучший способ заключается в использовании любой навигационной известно UI связывания, что ваш MVVM инструментарий использует. Окно параметров начнется как новое окно корневого уровня, к которому вы привязали бы корень вашей модели данных параметров.
Итак, коротко подумайте о диалоге параметров в виде мини-приложения, которое использует ту же структуру, что и ваше основное приложение MVVM, но с другим корнем модели данных.
Если вы планируете разрешить пользователю отменять изменения в параметрах, то вы хотите, чтобы модель данных параметров была клонируемой, чтобы вы могли заполнить окно параметров клоном, а затем поменять реальные параметры с помощью новые данные, если пользователь нажмет OK в окне параметров. Если они выбрали отмену, вы можете просто выбросить клонированный объект и уничтожить окно.
Пользователь должен уметь исправлять изменения. Что вы подразумеваете под «... моделью данных [...] как представление в памяти ...»?Единственный способ, который я вижу, - глубоко скопировать всю модель данных, внести изменения и полностью скопировать ее обратно, если пользователь примет изменения. – ooorndtski
Изменил формулировку этой заключительной части, чтобы более четко понять мой смысл. Другой путь был бы, если бы ваши параметры были постоянно сохранены каким-то образом, как в базе данных, и перечитывать по мере необходимости. –
Если я реализую IClonable, я должен реализовать его в каждом настраиваемом типизированном объекте модели данных моих вариантов? Поскольку у меня есть много настраиваемых типизированных объектов и их коллекций в модели данных, есть ли простой способ клонировать всю модель данных? – ooorndtski
- 1. Внедрение модального диалогового окна в ASP.NET MVC
- 2. Повторное внедрение диалогового окна подсказки() с использованием модального
- 3. Настройка размера диалогового окна
- 4. Вызов диалогового окна JQuery UI из родительского диалогового окна
- 5. Обновление диалогового окна JQuery
- 6. Закрытие диалогового окна, созданного JOptionPane.showOptionDialog()
- 7. Образец окна диалогового окна ATL
- 8. Создание диалогового окна/всплывающие окна
- 9. jqueryUI размер окна диалогового окна
- 10. Вызов дочернего диалогового окна и передача входных параметров
- 11. Открытие дочернего диалогового окна, которое переопределяет размер диалогового окна родителя
- 12. Поиск способа возврата диалогового окна диалога диалогового окна JQuery
- 13. Динамическое изменение диалогового окна диалогового окна jQuery Кнопка Текст
- 14. Получить данные из диалогового окна jquery при закрытии диалогового окна
- 15. Запуск второго диалогового окна jQuery из начального диалогового окна jQuery
- 16. Как предотвратить изменение диалогового окна JQuery UI диалогового окна?
- 17. Получение внутреннего диалогового окна за пределами диалогового окна
- 18. андроид - кнопка подтверждения диалогового окна создания диалогового окна
- 19. Как вернуть пользовательский ввод из диалогового окна диалогового окна jQuery
- 20. Создание всплывающего диалогового окна
- 21. Закрытие диалогового окна jQuery
- 22. Создание диалогового окна JavaFX
- 23. Полимер: отображение диалогового окна
- 24. Внутри диалогового окна Alert
- 25. Исключение диалогового окна JavaFX
- 26. Получить обработчик диалогового окна
- 27. Фокус создания диалогового окна
- 28. Результат неактивности диалогового окна
- 29. Возврат диалогового окна JavaScript
- 30. Обзор диалогового окна файла
Поскольку вы используете WPF, используете ли вы какие-либо подходы MVVM для создания своего приложения? –
Да, я использую шаблон mvvm. – ooorndtski