Заставьте пользовательский элемент управления отобразиться за пределами границы формы

Поскольку selectedrecipe устанавливается асинхронно, вы должны использовать либо значение по умолчанию для вашего @Input(), либо использовать оператор сохранения навигации ?. внутри вашего шаблона: "

<img src="{{selectedrecipe?.imagepath}}" alt="{{selectedrecipe?.name}}">
14
задан Danny Frencham 11 November 2008 в 13:57
поделиться

5 ответов

Управление 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();
25
ответ дан 1 December 2019 в 08:54
поделиться

Снимки экрана похожи на Windows Forms приложения, таким образом, мой ответ для winforms.

Я предполагаю, что лучшее решение состояло бы в том, чтобы создать customcontrol, который сам использует средство выбора даты и времени, которое уже имеет поведение.

Покажите пустое текстовое поле, пока оно не нажато, затем отобразите datetimepicker.

Это сохранило бы Вас набор кода..

3
ответ дан 1 December 2019 в 08:54
поделиться

Я столкнулся с этим при попытке реализовать пользовательский элемент управления и обнаружил, что это - удивительно тяжелая проблема. Нет никакой встроенной функциональности в Windows.Forms модель для поддержки средств управления, область дисплея которых расширяется вне клиентской области их контейнера.

В основном необходимо или использовать Windows API или привлечь средства управления в Форме с набором AlwaysOnTop. Оба подхода более трудны, чем они должны быть. Я закончил тем, что перепроектировал свое управление так, чтобы вместо того, чтобы отобразить его расширенное содержание в выпадающем оно использовало модальное диалоговое окно. Это было довольно неудовлетворяющим решением, но я провел несколько недель, пробуя другие подходы и никогда не мог получать ничего, что последовательно работало через все варианты использования (как исчезновение, когда приложение теряет фокус).

2
ответ дан 1 December 2019 в 08:54
поделиться

Я не на 100% уверен, но беглый взгляд на класс DateTimePicker на Отражателе берет меня к SafeNativeMethods.SetWindowPos внутренний класс.

Можно переопределить SetBoundsCore от основного класса Управления или, как Tigraine указал, создайте пользовательский элемент управления на основе DateTimePicker.

Надежда это помогает, Bruno Figueiredo

1
ответ дан 1 December 2019 в 08:54
поделиться

Причина, что Ваше управление обрублено, состоит в том, потому что это - дочерний элемент управления формы, на которой Вы находитесь. Любое управление на форме должно содержаться формой, следовательно это обрублено.

Я не сделал этого в .NET, но имел подобную проблему в VB6. Решение затем состояло в том, чтобы установить родителя всплывающего окна (календарь в Вашем случае), чтобы быть рабочим столом. Это позволит этому расширяться вне границ Вашей формы. Необходимо будет сделать некоторое волшебство P/Invoke найти, что hWnd всплывающего окна и другой P/Invoke устанавливают родителя.

0
ответ дан 1 December 2019 в 08:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: