更改stackpanel上的可见性时的例外情况

时间:2013-04-10 14:46:47

标签: c# silverlight xaml silverlight-4.0

我有两个堆栈面板,每个包含一个数据网格。

我在加载源代码时设置了datagrid的itemsSource。

我的面板在开始时折叠,然后,当我选中一个RadioButton时,必须出现。

这是stackpanel的xaml:

                            <StackPanel Name="spListeList"
                                        Grid.Row="0"
                                        Grid.Column="2"
                                        Orientation="Horizontal"
                                        Visibility="Collapsed">
                                <sdk:DataGrid Name="dgListList" 
                                              VerticalAlignment="Top"
                                              HorizontalAlignment="Left"
                                              AutoGenerateColumns="False"   
                                              AlternatingRowBackground="Orange" 
                                              IsReadOnly="True">
                                    <sdk:DataGrid.Columns>
                                        <sdk:DataGridTextColumn Binding="{Binding IdList, Mode=TwoWay}" 
                                                        Visibility="Collapsed"
                                                        Width="10"/>
                                        <sdk:DataGridTextColumn Header=" "
                                                        Width="85"
                                                        Binding="{Binding LibList, Mode=TwoWay}"/>
                                    </sdk:DataGrid.Columns>
                                </sdk:DataGrid>
                            </StackPanel>
                            <StackPanel Name="spListeJury"
                                        Grid.Row="0"
                                        Grid.Column="3"
                                        Orientation="Horizontal"
                                        Visibility="Collapsed">
                                <sdk:DataGrid Name="dgListeJury" 
                                              VerticalAlignment="Top"
                                              HorizontalAlignment="Left"
                                              AutoGenerateColumns="False"   
                                              AlternatingRowBackground="Orange" 
                                              IsReadOnly="True">
                                    <sdk:DataGrid.Columns>
                                        <sdk:DataGridTextColumn Binding="{Binding IdJury, Mode=TwoWay}" 
                                                        Visibility="Collapsed"
                                                        Width="10"/>
                                        <sdk:DataGridTextColumn Header=" "
                                                        Width="85"
                                                        Binding="{Binding LibJury, Mode=TwoWay}" />
                                    </sdk:DataGrid.Columns>
                                </sdk:DataGrid>

                            </StackPanel>

我有10个radioButton和2个处理程序(类似名称除外)。

void rbListeList_Checked(object sender, RoutedEventArgs e)
{
    try
    {
        if (templateColumnListeList == null)
        {
            templateColumnListeList = new DataGridTemplateColumn();
        }

        dgListeList.Columns.Remove(templateColumnListeList);
        templateColumnListeList.Header = "Select";
    templateColumnListeList.CellTemplate = (DataTemplate)Resources["ItemTemplateSelect"];
    dgListeList.Columns.Add(templateColumnListeList);
    templateColumnListeList.DisplayIndex = 0;
    spListeList.Visibility = Visibility.Visible;
    spListeJury.Visibility = Visibility.Collapsed;
}
catch (Exception ex)
{
    throw new Exception(ex.Message);
}

}

当我评论改变可见度的线条时,没有任何问题。但是当它不是时,我得到了一个ArgumentOutOfBound Exception

当两个面板在开头可见时,它们看起来很好,没有错误。当我点击radioButton并进入处理程序时,模板列也出现了......

我尝试了另一个: 当我明星同时可见,应用程序运行良好,并且面板出现并且以我想要的方式消失...所以看起来,当我出演两个都折叠时出现问题。

我无法在应用程序运行时更改包含Source的面板的可见性吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

在XAML中设置Visibility =“Collapsed”时,当窗口加载时,该控件不会实例化。如果使用WPF,请尝试Visibility =“Hidden”。 Silverlight不支持隐藏的可见性。或尝试在Window的Loaded事件中设置Collapsed属性。

答案 1 :(得分:0)

我想说上面的列代码存在问题,但如果没有更多代码则很难说清楚。我通常将控件的visibility属性绑定到页面的datacontext上的属性,并在需要时设置该值。如果您发布更多代码,我可以提供更多帮助。