【发布时间】:2023-04-08 04:32:01
【问题描述】:
我有一个奇怪的问题,你们可能会很快解决 :-)
在页面中有一个带有一些列的 WPF DataGrid,我希望在用户调整窗口大小时动态调整列宽,所以这是一种拉伸效果。
当我这样设置列时:
<DataGridTextColumn Header="Column A" Binding="{Binding ColumnA}" Width="*"/>
然后运行我的应用程序,窗口被冻结,列不断扩展,就像动画一样...... 那么我如何保持我的列在适当的位置并仅在用户调整窗口大小时调整大小。
对于凌乱的 WPF,它的实验代码感到抱歉。
<Page x:Class="SharepointUploader.Pages.FieldMapping"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:SharepointUploader.Pages"
mc:Ignorable="d"
Title="FieldMapping" Background="White" HorizontalAlignment="Stretch" >
<Page.Resources>
<local:DGRows x:Key="dgRows" />
<CollectionViewSource x:Key="cvsRows" Source="{StaticResource dgRows}">
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="NotesForm"/>
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
<Style TargetType="DataGrid">
<Setter Property="VerticalGridLinesBrush" Value="Transparent"/>
<Setter Property="HorizontalGridLinesBrush" Value="Transparent"/>
<Setter Property="ItemsSource" Value="{Binding Source={StaticResource cvsRows}}"/>
<Setter Property="HorizontalAlignment" Value="Stretch"/>
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
<Setter Property="Height" Value="700"/>
<Setter Property="AutoGenerateColumns" Value="False"/>
<Setter Property="CanUserAddRows" Value="False"/>
<Setter Property="CanUserResizeRows" Value="False"/>
<Setter Property="SelectionMode" Value="Single"/>
<Setter Property="AlternatingRowBackground" Value="LightBlue"/>
<Setter Property="AlternationCount" Value="2"/>
<Setter Property="HeadersVisibility" Value="Column"/>
<Setter Property="Margin" Value="5" />
</Style>
<Style TargetType="DataGridRow">
<Setter Property="Foreground" Value="Black"/>
<Setter Property="Height" Value="40" />
</Style>
<Style TargetType="DataGridCell">
<Setter Property="TextBlock.TextAlignment" Value="Left" />
<Setter Property="TextBlock.VerticalAlignment" Value="Center"/>
<!--No row highlighting on selection-->
<Style.Triggers>
<Trigger Property="DataGridCell.IsSelected" Value="True">
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
<Setter Property="Background" Value="Transparent"/>
</Trigger>
</Style.Triggers>
</Style>
</Page.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<DataGrid x:Name="dgFields" Grid.Row="0" Width="{Binding ElementName=Page, Path=ActualWidth}">
<DataGrid.GroupStyle>
<!-- Style for groups at top level. -->
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType="{x:Type GroupItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupItem}">
<Expander IsExpanded="True" Background="White" Foreground="White" Width="Auto">
<Expander.Header>
<DockPanel Background="LightGray">
<TextBlock Foreground="Black" Text="{Binding Path=Name, StringFormat=Form {0}}"/>
</DockPanel>
</Expander.Header>
<Expander.Content>
<ItemsPresenter/>
</Expander.Content>
</Expander>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</DataGrid.GroupStyle>
<DataGrid.Columns>
<DataGridCheckBoxColumn Header="" Binding="{Binding Selected, Mode=TwoWay}" Width="10" CanUserResize="False" CanUserReorder="False"/>
<DataGridTextColumn Header="Column A" Binding="{Binding ColumnA}" Width="*"/>
<DataGridTextColumn Header="Column B" Binding="{Binding ColumnB}" Width="Auto" />
<DataGridTextColumn Header="Column C" Binding="{Binding ColumnC}" Width="Auto " />
<DataGridTextColumn Header="Column D" Binding="{Binding ColumnD}" Width="Auto" />
</DataGrid.Columns>
</DataGrid>
</Grid>
</Page>
【问题讨论】:
-
请多解释一下? “然后运行我的应用程序,窗口被冻结,列不断扩大,就像动画一样......”
-
DataGrid GroupStyle 有问题。如果删除它,列宽将按预期工作。