У меня есть пользовательский элемент управления.Этот пользовательский элемент управления создается из кода и посредством привязки он уже получает изменения, хотя он еще не виден.В какой-то момент он становится «видимым», присваивая его содержимому ContentHolder (это вторая страница в диалоговом окне настройки):
ContentHolder.Content = GamePreparation;
В моем пользовательском элементе управления есть ComboBox, который я в настоящее время заполняю вручную:
BoxGuestColor.Items.Clear();
if( Game?.CurrentTeamGuest != null )
{
foreach( var color in ( (TeamElement)Game.CurrentTeamGuest ).Colors )
{
var item = new Rectangle
{
Fill = new SolidColorBrush( FromHex( color ) ),
Height = 16,
VerticalAlignment = VerticalAlignment.Stretch,
Tag = color
};
BoxGuestColor.Items.Add( item );
}
if( BoxGuestColor.Items.Count > 0 )
{
BoxGuestColor.SelectedIndex = 0;
}
}
Как вы можете видеть из кода, я использую ComboBox для отображения нескольких цветов.Я помещаю прямоугольники в ComboBox, так как я хочу отображать только цвет и ничего больше.
Теперь все это работает хорошо!Моя проблема в том, что когда отображается элемент управления, я не вижу выбранный элемент.Только когда я нажимаю на стрелку, чтобы открыть ComboBox, запускается обновление, и я вижу все элементы (включая выбранный).
Используя отладчик, я понял, что выбранный элемент действителен, но его ширинаи height равны 0. Для элементов установлено значение Stretch as VerticalAlignment, но кажется, что обновление «не достигает» элементов.Они не масштабируются при отображении пользовательского элемента управления.Это происходит, когда я взаимодействую с ComboBox, как описано выше.
Я также пытался встроить прямоугольник в ComboBoxItem с тем же эффектом:
var item = new ComboBoxItem
{
Height = 16,
VerticalAlignment = VerticalAlignment.Stretch,
Tag = color,
Content = new Rectangle
{
Fill = new SolidColorBrush( FromHex( color ) ),
Height = 16,
VerticalAlignment = VerticalAlignment.Stretch,
Tag = color
}
};
Кто-нибудь знает, в чем проблемавозможно?Заранее спасибо!
Редактировать 1:
XAML прямо вперед:
<ComboBox Name="BoxGuestColor" Grid.Column="1" Margin="5" SelectionChanged="BoxGuestColor_SelectionChanged"/>
Редактировать 2:
Обратите внимание, что ComboBox имеет переменную ширину в зависимости от размера родительского окна.Использование жестко запрограммированных значений ширины (например, для прямоугольника) решает проблему обновления, но это оставляет меня с теми прямоугольниками, которые никогда не заполняют ComboBox, что просто не выглядит хорошо.