Stackpanel可见性 - 我做错了什么。 。

时间:2014-08-11 18:05:08

标签: wpf

我想创建一个包含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后没有看到它的原因? (如果这是一个菜鸟问题,我很抱歉)

2 个答案:

答案 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)

列表框最好使用项目模板填充。如果要添加不同类型的任意控件,只需使用堆栈面板。