尝试设置GridViewColumn宽度时发生异常

时间:2019-05-22 18:15:58

标签: c# wpf listview gridview

我有一个corev1.connect_get_namespaced_pod_proxy_with_path()

ListView

我希望<ListView Grid.Row="4" Grid.Column="1" ItemsSource="{Binding Path=ListViewAgentItems, Mode=TwoWay}" HorizontalAlignment="Left" HorizontalContentAlignment="Left" SizeChanged="ListView_SizeChanged"> <ListView.View> <GridView> <GridViewColumn HeaderContainerStyle="{StaticResource ListViewStyle}" Header="Agent ID" DisplayMemberBinding="{Binding AgentId}"/> <GridViewColumn HeaderContainerStyle="{StaticResource ListViewStyle}" Header="Distance" DisplayMemberBinding="{Binding Distance}"/> </GridView> </ListView.View> </ListView> 占整个GridView宽度的50%,而不是使列适合其内容宽度的默认行为。当然,GridViewColumn本身也应该占据其所在列的整个宽度。

所以我添加了ListView事件:

SizeChanged

发生的事情是该事件不断被调用,并且private void ListView_SizeChanged(object sender, SizeChangedEventArgs e) { ListView listView = sender as ListView; GridView gView = listView.View as GridView; var workingWidth = listView.ActualWidth - SystemParameters.VerticalScrollBarWidth; // take into account vertical scrollbar var col1 = 0.5; var col2 = 0.5; gView.Columns[0].Width = workingWidth * col1; gView.Columns[1].Width = workingWidth * col2; } 的值越来越小,直到达到负值为止,在这种情况下,由于无法设置负值,我遇到了异常到width属性。我该如何解决此问题,并获得每列50%的结果?

1 个答案:

答案 0 :(得分:1)

与列表视图相比,使用数据网格仍然更好。

设置水平对齐方式后,控件将具有自动宽度。

因此,您可以计算尺寸,然后控件进行调整,并更改其尺寸,从而再次触发控件。进入自我传播的死亡螺旋。

尝试删除这两行:

          HorizontalAlignment="Left" 
          HorizontalContentAlignment="Left"

您也许还可以更好地处理更改后的窗口大小而不是列表视图。

这大致是一个数据网格的样子:

    <DataGrid
        AutoGenerateColumns="False"
        ItemsSource="{Binding Path=ListViewAgentItems}" 
          >
        <DataGrid.Columns>
            <DataGridTextColumn 
                 Width="*"
                 Header="Agent ID" 
                 Binding="{Binding AgentId}"/>
            <DataGridTextColumn 
                Width="*"
                Header="Distance"
                Binding="{Binding Distance}"/>
        </DataGrid.Columns>
    </DataGrid>