我有一个用户控件。此用户控件是通过代码创建的,并且通过绑定,尽管尚不可见,但已经接受了更改。通过将其分配给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中,因为我只想显示一种颜色而已。
现在一切正常!我的问题是显示控件时,我看不到所选元素。仅当我单击箭头以打开组合框时,才会触发更新,并且我可以看到所有元素(包括所选元素)。
使用调试器,我发现所选项目是有效的,但其宽度和高度均为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:
请注意,组合框的宽度取决于父窗口的大小。使用硬编码的宽度(例如在Rectangle上)可以解决更新问题,但是,这些矩形却永远无法填充ComboBox,这看起来简直不好。
答案 0 :(得分:0)
如果在显示控件之前将其填充,请在显示控件后尝试更新.SelectedIndex属性的绑定。
这将通知视图它需要显示列表中的第一项。
答案 1 :(得分:0)
由于使用控件名称“ BoxGuestColor”(当前上下文中不存在),我在使用您的代码时首先遇到了错误。所以我将其更改为“ BoxHomeColor”。希望您不更新差异。组合框并选中另一个。
第二件事,当我尝试使用您的代码时,最初没有在加载窗口后向我显示选定的代码。在后面的代码中显式添加Width =“ 100”(一些随机值)后,它开始显示所选的内容。参见下面的代码,
BoxHomeColor.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,
Width = 100,
VerticalAlignment = VerticalAlignment.Stretch,
Tag = color
};
BoxHomeColor.Items.Add( item );
}
if( BoxHomeColor.Items.Count > 0 )
{
BoxHomeColor.SelectedIndex = 0;
} }
但是在您的情况下,如果您无法在代码隐藏中硬编码宽度,则尝试显式设置组合框的宽度,并从BoxHomeColor.Width分配矩形的宽度,如下所示,
<ComboBox Name="BoxHomeColor" Grid.Column="1" Margin="5"
SelectionChanged="BoxHomeColor_SelectionChanged" Width="400"/>
BoxHomeColor.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,
Width = BoxHomeColor.Width,
VerticalAlignment = VerticalAlignment.Stretch,
Tag = color
};
BoxHomeColor.Items.Add( item );
}
if( BoxHomeColor.Items.Count > 0 )
{
BoxHomeColor.SelectedIndex = 0;
} }
希望这种方法可以尝试一下,但是如果即使对于xbox组合框也无法对宽度进行硬编码,那么我们可能会考虑采用其他方法来解决。但是,经过试验,请告诉我们您的意见。