增加Silverlight DataGrid中的列宽以填充整个DG宽度

Hen*_*sel 16 c# silverlight datagrid width

我有一个绑定到SQL表的DataGrid控件.

XAML代码是:

<data:DataGrid x:Name="dg_sql_data" 
                       Grid.Row="1" 
                       Visibility="Collapsed" 
                       Height="auto" 
                       Margin="0,5,5,5"
                       AutoGenerateColumns="false"
                       AlternatingRowBackground="Aqua"
                       Opacity="80"
                       >
    <data:DataGrid.Columns>
        <data:DataGridTextColumn Header="Latitude" Binding="{Binding lat}" />
        <data:DataGridTextColumn Header="Longitude" Binding="{Binding long}" />
        <data:DataGridTextColumn Header="Time" Binding="{Binding time}" />
    </data:DataGrid.Columns>
</data:DataGrid>
Run Code Online (Sandbox Code Playgroud)

是否可以增加单列大小以填充数据网格的整个宽度?

谢谢,
亨里克

编辑:Silverlight SDK 4附带宽度为"*"的列.

Hen*_*sel 11

解:

    void dg_sql_data_SizeChanged(object sender, SizeChangedEventArgs e)
    {
        DataGrid myDataGrid = (DataGrid)sender;
        // Do not change column size if Visibility State Changed
        if (myDataGrid.RenderSize.Width != 0)
        {
            double all_columns_sizes = 0.0;
            foreach (DataGridColumn dg_c in myDataGrid.Columns)
            {
                all_columns_sizes += dg_c.ActualWidth;
            }
            // Space available to fill ( -18 Standard vScrollbar)
            double space_available = (myDataGrid.RenderSize.Width - 18) - all_columns_sizes;
            foreach (DataGridColumn dg_c in myDataGrid.Columns)
            {
                dg_c.Width = new DataGridLength(dg_c.ActualWidth + (space_available / myDataGrid.Columns.Count));
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

结果:

替代文字


Shi*_*mmy 8

仅在WPF中测试,而不是在Silverlight中测试:

我在WPF 3.5 SP1中设置它完美无瑕,不保证Silverlight,但如果它有效,它确实很迷人.

<data:DataGridTextColumn Header="Time" Binding="{Binding}" Width="*" />
Run Code Online (Sandbox Code Playgroud)

  • 真棒!适用于WPF,不确定Silverlight (2认同)