WP7 silverlight настраиваемый элемент управления с помощью всплывающего окна - PullRequest
3 голосов
/ 26 октября 2010

Я создаю пользовательский указатель даты, у меня есть текстовое поле, при нажатии на которое открывается календарь во всплывающем окне.То, что я хочу сделать, это изменить размер всплывающего окна, чтобы он отображал весь мой календарь, но я не могу изменить его ..., я пытался использовать Высота, Ширина, MinHeight, MinWidth ... но это нене работает, всплывающее окно продолжает показываться с фиксированным размером.

Дело в том, что родительское свойство моего всплывающего окна не оценивается, так как оно имеет проблемы с выражением (согласно отладчику), поэтому я уверен, что родитель моего всплывающего окнане главный экран (скажем, сетка макета).

Как, например, открыть всплывающее окно в определенном контексте?Эта часть моего кода не XAML, а только код C # и выглядит следующим образом:

using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Controls.Primitives;

namespace CalendarBranch.components
{
    public class wpDatePicker:TextBox
    {
        private CalendarPopup calendar;
        private Popup popup;

        public wpDatePicker()
        {
            this.calendar = new CalendarPopup();
            this.popup = new Popup();

            this.popup.Child = this.calendar;
            this.popup.Margin = new Thickness(0);

            this.MouseLeftButtonUp += new MouseButtonEventHandler(wpDatePicker_MouseLeftButtonUp);

            this.calendar.onDateSelect += new EventHandler(onDateSelected);

            this.IsReadOnly = true;

        }

        protected void wpDatePicker_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            this.popup.Height = this.calendar.Height;
            this.popup.Width = this.calendar.Width;
            this.popup.HorizontalAlignment = HorizontalAlignment.Center;
            this.popup.VerticalAlignment = VerticalAlignment.Center;
            this.popup.HorizontalOffset = 0;
            this.popup.VerticalOffset = 0;
            this.popup.MinHeight = this.calendar.Height;
            this.popup.MinWidth = this.calendar.Width;

            this.popup.IsOpen = true;
        }

        private void onDateSelected(Object sender, EventArgs ea) {
            this.Text = this.calendar.SelectedValue.ToShortDateString();
            this.popup.IsOpen = false;
        }

    }
}

PS: класс Calendar - это просто UserControl, который содержит сетку с несколькими столбцами, HyperLinkButtons и TextBlocks, поэтомуничего особенного.

Заранее спасибо, ребята;)

Приветствия, Милуд Б.

1 Ответ

0 голосов
/ 25 марта 2012

Всплывающее управление изменяет свой размер, чтобы соответствовать содержимому внутри него. Например, если вы установите для дочернего элемента Popup значение StackPanel, а для width / height установлено значение 100, всплывающее окно будет иметь размер 100x100.

Так что очень важно установить размеры не вашего всплывающего окна, а вашей внутренней панели. Попробуйте поместить ваш контент в панель стека и назначить там необходимую ширину / высоту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...