2010-12-05 2 views
0

У меня есть пользовательский пользовательский элемент управления WPF, называемый TimeoutPanel, который я пытаюсь использовать. Однако, если я попытаюсь добавить его в свое окно из файла .cs, он фактически не появится.Пользовательский элемент управления пользователя не отображается в окне WPF?

Мне нужно иметь возможность получить дескриптор окна, которому принадлежит экран тайм-аута.

TimeoutPanel tp = new TimeoutPanel(this); 
tp.Visibility = Visibility.Visible; 

Я был бы очень признателен, если бы кто-нибудь мог указать, что я делаю неправильно!

Edit: Вот конструктор для моего TimeoutPanel

public TimeoutPanel(Window parent) 
{ 
    this.InitializeComponent(); 
    parentWindow = parent; 
} 

Я зову его с помощью следующего кода в файле .cs для окна Homescreen:

TimeoutPanel tp = new TimeoutPanel(this); 
MainGrid.Children.Add(tp); 

он выходит из строя, за исключением : Дополнительная информация: Невозможно создать объект типа 'TicketBooth.TimeoutPanel'. Ошибка CreateInstance, что может быть вызвано отсутствием конструктора по умолчанию для «TicketBooth.TimeoutPanel». Ошибка в объекте 'System.Windows.Controls.Grid' в файле разметки 'TicketBooth; component/homescreen.xaml' Строка 174 Позиция 10.

Спасибо!

+0

Ах, извините, я понял! Исключением была опечатка с моей стороны ... Кажется, она работает сейчас! Спасибо за всю твою помощь! – ksamurai 2010-12-05 04:40:59

ответ

1

Что вы делаете бы ни в коем что UserControl в окне вашего приложения WPF. Вы должны поместить UserControl на дочерний элемент в Window. Установка Visiblity фактически не устанавливает UserControl в качестве дочернего элемента любого контейнера.

Я предполагаю, что сетка - это ваш контейнер внутри окна. Если так; чтобы добавить UserControl в Grid, просто добавьте его как дочерний элемент в Grid. Вам нужно будет назвать свою сетку, прежде чем ссылаться на нее в коде позади ...

TimeoutPanel tp = new TimeoutPanel(this); 
myGrid.Children.Add(tp); 
0

вам необходимо добавить этот элемент управления в какую-либо родительскую коллекцию управления.

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

TimeoutPanel tp = new TimeoutPanel(this); 
stckPanel.Children.Add(tp); 
+0

Спасибо за отзыв! Однако при этом он падает. Однако я заметил, что он работает, если я удаляю параметр из конструктора (не совсем уверен, почему ему не нравится параметр). Возможно, лучший подход - просто вызвать второй метод после его настройки, чтобы передать мой параметр: TimeoutPanel tp = new TimeoutPanel(); tp.passPartent (this); Было бы здорово, если бы вы могли объяснить, почему он падает с параметром! Благодаря! – ksamurai 2010-12-05 04:13:05

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