(Я пытаюсь изучить WPF с помощью руководств и документации, а также пытаюсь разработать пользовательский интерфейс для своего бэкэнд-полного приложения, пока говорю. Я слышал, как люди говорят, что кривая обучения довольно крутая. Но иногда мне интересно, что Я пытаюсь сделать то, что на самом деле сложно сделать в WPF, или, если это просто, но я думаю неправильно, или, если нет, это довольно просто, но я просто не знаю, как это сделать.)
Вот мой текущий вопрос. Я хотел, чтобы щелчок по какой-либо части моего пользовательского интерфейса открывал «всплывающее окно», где пользователь мог ввести дополнительную информацию. Я бы хотел, чтобы всплывающее окно было в стиле лайтбокса, то есть всплывающее окно является модальным по отношению к странице, затемняет остальную часть страницы, чтобы стать центром внимания и т. Д. Они обычно встречаются на веб-сайтах.
Немного поисков привело меня к элементу управления WPF Popup. Я добавил его, поместил в него свой контент, установил для свойства IsOpen значение True и - готово! Всплывающее окно. Затем я добавил невидимый прямоугольник, который покрывает все мое окно, и также установил для него значение «Видимый», когда я хочу, чтобы всплывающее окно открывалось. Здорово!
Итак, теперь я хотел сделать это динамически, потому что иногда я загружаю запись, для которой иногда потребуется открыть другой элемент управления (UserControl) во всплывающем окне для редактирования информации о нем. Поэтому я создал себе метод под названием OpenPopup. Но я не могу найти способ написать этот метод с использованием WPF. В Windows Forms я бы написал: (я использую VB.NET)
Sub ShowPopup (form as Form, ctrl as Control)
'Create 'rect' as new dark rectangle control
'Z-order it to the top
'form.Controls.Add 'rect'
'form.Controls.Add ctrl
'Z-order 'ctrl' to the top
'Center 'ctrl'
'Set focus to it
End Sub
Но с WPF у меня возникают проблемы:
1) Я не могу добавить его в окно WPF, потому что у него уже есть дочерний элемент.
2) Если этот дочерний элемент - Canvas, это неплохо. Я могу это обнаружить и добавить на холст. Мне нужно найти способ установить его свойства Left, Top и т. Д., А также Width и Height, поскольку они не кажутся свойствами элемента управления Rectangle, а скорее расширяются объектом Canvas - в XAML они называются Cavnas.Top и т.д., но Intellisense не показывает их, когда я пытаюсь использовать его в коде.
3) А если это StackPanel? Тогда мой прямоугольник будет просто уложен под другими элементами управления! И не прикрывая их! Это можно обойти?
4) А если в окне всего один элемент управления и вообще нет элемента управления контейнера?
5) Думаю, проблем, с которыми я столкнулся, было больше. Но начнем с этого.
Заранее спасибо за помощь.