我有一个包含两列的WPF DataGrid;我希望第二列自动适合网格,因此我将其宽度设置为“*”。但是,在运行时,DataGrid会调整为一个荒谬的宽度。
这是我的基本标记(我认为)删除了无关的控件和属性:
<Grid>
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<Grid>
<StackPanel>
<DataGrid Name="MyGrid" AutoGenerateColumns="False"
CanUserAddRows="False" CanUserReorderColumns="False"
CanUserResizeColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Column 1" Width="Auto" Binding="{Binding Field1}"/>
<DataGridTextColumn Header="Column 2" Width="*" Binding="{Binding Field2}"/>
</DataGrid.Columns>
</DataGrid>
</StackPanel>
</Grid>
</ScrollViewer>
</Grid>
我怀疑问题在于ScrollViewer中的DataGrid。我尝试将ScrollViewer的宽度设置为DataGrid宽度:
Width="{Bidning ElementName=MyGrid, Path=ActualWidth}"
如this post中所述,但没有运气。我也尝试将HorizontalScrollBarVisibility设置为Disabled,但随后一切都消失了(严重)。
我还应该提到所有这一切都在一个UserControl中,它位于另一个UserControl中,然后它位于Window中,这可能与“消失”的一切有关(我怀疑宽度已经疯狂,一切都是'关闭窗')。
答案 0 :(得分:1)
尝试删除DataGrid之前的所有内容,从而简化布局。 DataGrid已经包含嵌入在其默认模板中的ScrollViewer。此外,使用StackPanel,您可以让其子项填充所有可用空间 - StackPanel根据其内容的大小进行拉伸。因此,您的DataGrid
会延伸到无限远。
我还将DataGrid的Name属性更改为x:Name,这就是原因: In WPF, what are the differences between the x:Name and Name attributes?
<DataGrid
x:Name="MyGrid"
AutoGenerateColumns="False"
CanUserAddRows="False"
CanUserReorderColumns="False"
CanUserResizeColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Column 1" Width="Auto" Binding="{Binding Field1}"/>
<DataGridTextColumn Header="Column 2" Width="*" Binding="{Binding Field2}"/>
</DataGrid.Columns>
</DataGrid>