2010-10-26 2 views
3

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

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

Как я могу, например, открыть всплывающее окно в определенном контексте? Эта часть моего кода не 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: класс календарь просто UserControl, который содержит сетку с несколькими столбцами, HyperLinkButtons и TextBlocks, так что ничего особый.

Спасибо заранее ребята;)

Приветствия Miloud B.

+0

Могу ли я предложить вам быстро ознакомиться с документацией Markdown (справка по правой стороне при редактировании вопроса). – AnthonyWJones

+0

Хорошо. Что относительно * моей проблемы * сейчас? – CoolStraw

ответ

1

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

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

Смежные вопросы