Поскольку selectedrecipe
устанавливается асинхронно, вы должны использовать либо значение по умолчанию для вашего @Input()
, либо использовать оператор сохранения навигации ?.
внутри вашего шаблона: "
<img src="{{selectedrecipe?.imagepath}}" alt="{{selectedrecipe?.name}}">
Управление ToolStripDropDown имеет эту функциональность так путем наследования ему, мы можем сделать простой PopupWindow.
/// <summary>
/// A simple popup window that can host any System.Windows.Forms.Control
/// </summary>
public class PopupWindow : System.Windows.Forms.ToolStripDropDown
{
private System.Windows.Forms.Control _content;
private System.Windows.Forms.ToolStripControlHost _host;
public PopupWindow(System.Windows.Forms.Control content)
{
//Basic setup...
this.AutoSize = false;
this.DoubleBuffered = true;
this.ResizeRedraw = true;
this._content = content;
this._host = new System.Windows.Forms.ToolStripControlHost(content);
//Positioning and Sizing
this.MinimumSize = content.MinimumSize;
this.MaximumSize = content.Size;
this.Size = content.Size;
content.Location = Point.Empty;
//Add the host to the list
this.Items.Add(this._host);
}
}
Использование:
PopupWindow popup = new PopupWindow(MyControlToHost);
popup.Show(new Point(100,100));
...
popup.Close();
Снимки экрана похожи на Windows Forms приложения, таким образом, мой ответ для winforms.
Я предполагаю, что лучшее решение состояло бы в том, чтобы создать customcontrol, который сам использует средство выбора даты и времени, которое уже имеет поведение.
Покажите пустое текстовое поле, пока оно не нажато, затем отобразите datetimepicker.
Это сохранило бы Вас набор кода..
Я столкнулся с этим при попытке реализовать пользовательский элемент управления и обнаружил, что это - удивительно тяжелая проблема. Нет никакой встроенной функциональности в Windows.Forms
модель для поддержки средств управления, область дисплея которых расширяется вне клиентской области их контейнера.
В основном необходимо или использовать Windows API или привлечь средства управления в Форме с набором AlwaysOnTop. Оба подхода более трудны, чем они должны быть. Я закончил тем, что перепроектировал свое управление так, чтобы вместо того, чтобы отобразить его расширенное содержание в выпадающем оно использовало модальное диалоговое окно. Это было довольно неудовлетворяющим решением, но я провел несколько недель, пробуя другие подходы и никогда не мог получать ничего, что последовательно работало через все варианты использования (как исчезновение, когда приложение теряет фокус).
Я не на 100% уверен, но беглый взгляд на класс DateTimePicker на Отражателе берет меня к SafeNativeMethods.SetWindowPos
внутренний класс.
Можно переопределить SetBoundsCore
от основного класса Управления или, как Tigraine указал, создайте пользовательский элемент управления на основе DateTimePicker.
Надежда это помогает, Bruno Figueiredo
Причина, что Ваше управление обрублено, состоит в том, потому что это - дочерний элемент управления формы, на которой Вы находитесь. Любое управление на форме должно содержаться формой, следовательно это обрублено.
Я не сделал этого в .NET, но имел подобную проблему в VB6. Решение затем состояло в том, чтобы установить родителя всплывающего окна (календарь в Вашем случае), чтобы быть рабочим столом. Это позволит этому расширяться вне границ Вашей формы. Необходимо будет сделать некоторое волшебство P/Invoke найти, что hWnd всплывающего окна и другой P/Invoke устанавливают родителя.