我想创建一个包含StackPanels的ListBox作为其元素。 StackPanels将在运行时创建并添加到后面的C#代码中。 。
StackPanels将包含一些图像,但目前还没有任何图像存在,所以在这段代码中我只是想确保我可以做机制。
我的XAML看起来像这样:
<Grid>
<ListBox Name="listBoxImages" BorderBrush="DarkGray" Width="600" Height="300" BorderThickness="3"
Margin="0" Padding="0" Background="#FFC0C0C0"/>
</Grid>
在C#代码隐藏中,我故意设置Listbox的背景颜色与XAML中的背景颜色不同,以验证我是否在代码隐藏中正确访问了ListBox。
listBoxImages.Background = Brushes.Blue; //just to show I'm accessing it . . .
那部分有效; ListBox显示蓝色 然后我去添加一个StackPanel。因为它还没有任何东西我给它一个高度和宽度以及不同的背景颜色,但我什么都没看到。所以我检查了它的可见性,这是错误的。所以我尝试使用 System.Windows.Visibility.Visible 设置可见性,但之后它仍然是假的。
StackPanel myStackPanel = new StackPanel();
myStackPanel.HorizontalAlignment = HorizontalAlignment.Left;
myStackPanel.VerticalAlignment = VerticalAlignment.Top;
myStackPanel.Background = Brushes.Bisque; // make something visible
myStackPanel.MinHeight = 50;
myStackPanel.Width = 50;
bool bResult = myStackPanel.IsVisible;
myStackPanel.Visibility = System.Windows.Visibility.Visible;
bResult = myStackPanel.IsVisible;
myStackPanel.Margin = new Thickness(10);
listBoxImages.Items.Add(myStackPanel);
为什么StackPanel可见性为false,这是我在将它添加到ListBox后没有看到它的原因? (如果这是一个菜鸟问题,我很抱歉)
答案 0 :(得分:1)
IsVisible在UI上呈现时设置为true。
您可以通过挂钩到Loaded事件进行验证,并通过在处理程序上放置断点来查看其中的IsVisible值。
myStackPanel.Loaded += (s, e) => bResult = myStackPanel.IsVisible;
此外,我验证了您发布的代码,并且可以看到在UI上呈现StackPanel。
更详细的定义:
.........
listBoxImages.Items.Add(myStackPanel);
myStackPanel.Loaded += new RoutedEventHandler(myStackPanel_Loaded);
}
void myStackPanel_Loaded(object sender, RoutedEventArgs e)
{
bool isVisible = (sender as StackPanel).IsVisible;
}
答案 1 :(得分:0)
列表框最好使用项目模板填充。如果要添加不同类型的任意控件,只需使用堆栈面板。