【问题标题】:Exceptions when changing visibility on stackpanel更改堆栈面板上的可见性时出现异常
【发布时间】:2013-04-10 14:46:46
【问题描述】:

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

我在加载源时设置了我的数据网格的 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 个单选按钮和 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 异常

当两个面板在开始时可见时,它们看起来很好,没有错误。当我单击单选按钮并进入处理程序时,模板列也会出现......

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

我不能在应用程序运行时更改面板上的可见性,包含 Source 吗?

谢谢。

【问题讨论】:

  • 如果单步进入代码,ArgumentOutOfBound 异常在哪里抛出?
  • 在 try 块的末尾。
  • 每次可见性更改都会引发它?我有点怀疑它来自templateColumnListeList.DisplayIndex = 0;
  • 我也是。但是,当我统计两者都可见时,应用程序运行良好......甚至可见性也发生了变化......
  • 您是否尝试过仅评论两条可见性行中的一条?让我们看看是否只有其中一个抛出异常。

标签: c# silverlight xaml silverlight-4.0


【解决方案1】:

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

【讨论】:

  • 好的,我在设置项目来源后设置了可见性。好吧,没有更多的例外,但数据网格永远不会出现......
  • 为什么将 DataGrid 放在堆栈面板中?堆叠面板根据方向属性水平/垂直堆叠项目。尝试将 Grid 用于 DataGrid。
  • DataGrid 不显示意味着您设置到该属性的 ItemsSource 为空。
【解决方案2】:

我会说上面的列代码存在问题,但如果没有更多代码就很难判断。我通常将控件的可见性属性绑定到页面数据上下文上的属性,并在需要时设置该值。如果您发布更多代码,我可能会提供更多帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    • 2021-04-07
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    相关资源
    最近更新 更多