Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF GridView将宽度调整为可用空间大小_C#_Wpf_Gridview - Fatal编程技术网

C# WPF GridView将宽度调整为可用空间大小

C# WPF GridView将宽度调整为可用空间大小,c#,wpf,gridview,C#,Wpf,Gridview,我的WPF应用程序中有一个ListView <ListView Name="generatorsList" ItemsSource="{Binding GeneratorsList}" SelectionMode="Single"> <ListView.View> <GridView> <GridViewColumn DisplayMemberBinding="{Binding Name}">

我的WPF应用程序中有一个ListView

<ListView Name="generatorsList" ItemsSource="{Binding GeneratorsList}" SelectionMode="Single">
    <ListView.View>
        <GridView>
            <GridViewColumn DisplayMemberBinding="{Binding Name}">
                <GridViewColumn.Header>
                    <GridViewColumnHeader Tag="Name">Name</GridViewColumnHeader>
                </GridViewColumn.Header>
            </GridViewColumn>
            <GridViewColumn Header="Type" DisplayMemberBinding="{Binding Type}" />
            <GridViewColumn Header="Description" DisplayMemberBinding="{Binding Description}" />
            <GridViewColumn Header="Actions" Width="60">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        //buttons
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>

名称
//钮扣
看起来像这样

这种情况是,当窗口小于列表本身时(例如,如果描述很长,如所示示例),滚动条形成并且
GridView
保持不变,因此操作按钮在屏幕上不可见(用户必须拖动滚动条)。

我想根据初始化时的当前窗口宽度设置最大列宽,这样当向用户显示ListView时,
操作
列将始终出现。那样

然后,如果用户愿意,他可以手动调整任何列的大小(因此不设置实际的“
maxwidth
”,只设置
width
)。
我尝试使用
*
但GridView不知道它的子项,因此
*
在这里不起作用,
自动
不是一个好选项,因为我无法设置每列所需的最大宽度,也不需要恒定宽度值,因为它必须取决于可变的窗口大小(可用空间大小)。我假设我需要某种类型的代码隐藏事件,但我不知道应该如何以正确的方式处理它。

尝试以下方法:

<DataGrid Name="generatorsList" 
          ItemsSource="{Binding GeneratorsList}"
          AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Name" 
                            Binding="{Binding Name}"
                            Width="*"/>

        <DataGridTextColumn Header="Type" 
                            Binding="{Binding Type}"/>

        <DataGridTextColumn Header="Description" 
                            Binding="{Binding Description}"
                            Width="2*"/>

        <DataGridTemplateColumn Header="Actions"
                                Width="auto"
                                MinWidth="60">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <!--buttons-->
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>


我已经将您的ListView更改为DataGrid(在我看来,这种情况更好)

试试这样的方法:

<DataGrid Name="generatorsList" 
          ItemsSource="{Binding GeneratorsList}"
          AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Name" 
                            Binding="{Binding Name}"
                            Width="*"/>

        <DataGridTextColumn Header="Type" 
                            Binding="{Binding Type}"/>

        <DataGridTextColumn Header="Description" 
                            Binding="{Binding Description}"
                            Width="2*"/>

        <DataGridTemplateColumn Header="Actions"
                                Width="auto"
                                MinWidth="60">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <!--buttons-->
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>


我已经将您的ListView更改为DataGrid(在我看来,这种情况更好)

你可以总是把动作放在最前面:这样,不管窗口或列宽如何,它们总是在同一个位置。这会起作用,但这是一个技巧。列表与前面的操作按钮不匹配。如果
Name
字段太长怎么办?您可以始终将操作放在前面:这样,无论窗口或列宽如何,它们始终位于同一位置。这将起作用,但这是一个技巧。列表与前面的操作按钮不匹配。如果
Name
字段太长怎么办?它会按预期调整自身大小,但结果是这样的:
DataGrid
似乎自己添加了所有源项属性,有什么想法吗?抱歉,忘了这一点
DataGrid
根据
ItemsSource
自动生成列。只要在您的数据网格上设置
AutoGenerateColumns=“False”
,您就会没事了。(我还编辑了我的答案以包含此修复)现在它工作正常,谢谢!此外,出于我自己的需要,我已将这些属性添加到DataGrid
Background=“Transparent”GridLinesVisibility=“None”CanUserResizeRows=“False”CanUserReorderColumns=“False”RowHeaderWidth=“0”IsReadOnly=“True”SelectionMode=“Single”
满足您需求的样式取决于您:)我建议您查看所有的功能,因为
DataGrid
有很多功能,其中很多功能在您的案例中都无法很好地启用。它还支持滚动,因此如果需要,您可以在
DataGrid
ScrollViewer
属性下测试更改属性(如果我没记错,一旦内容垂直溢出控件,它将打开垂直
滚动条
)。它按预期调整了自身大小,但它是这样做的:
DataGrid
似乎自己添加了所有源项属性,有什么想法吗?抱歉,忘了这一点
DataGrid
根据
ItemsSource
自动生成列。只要在您的数据网格上设置
AutoGenerateColumns=“False”
,您就会没事了。(我还编辑了我的答案以包含此修复)现在它工作正常,谢谢!此外,出于我自己的需要,我已将这些属性添加到DataGrid
Background=“Transparent”GridLinesVisibility=“None”CanUserResizeRows=“False”CanUserReorderColumns=“False”RowHeaderWidth=“0”IsReadOnly=“True”SelectionMode=“Single”
满足您需求的样式取决于您:)我建议您查看所有的功能,因为
DataGrid
有很多功能,其中很多功能在您的案例中都无法很好地启用。它还支持滚动,因此如果需要,可以在
DataGrid
ScrollViewer
属性下测试更改属性(如果我没记错,一旦内容垂直溢出控件,它将打开垂直
滚动条
)。