防止在数据网格调整大小时调整数据网格列的大小
Prevent datagrid column resize on datagrid resize
我有一个数据网格,其中列的宽度差异很大。它们不是自动生成的。当包含数据网格的 window 调整大小时,我想防止其中一些列被拉伸。
datagrid的定义在XAML
中是这样的
<DataGrid x:Name="DatagridControl" Grid.Row="1" CanUserAddRows="False" SelectionMode="Single" SelectionUnit="FullRow" AutoGenerateColumns="false" ItemsSource="{Binding Variables, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectedItem="{Binding SelectedVariable, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" BeginningEdit="DatagridControl_BeginningEdit" HeadersVisibility="Column" FontSize="16">
我有一些列,其中我知道最小大小是多少,所以它们是这样定义的,并且它按我想要的方式工作
<DataGridTemplateColumn x:Name="dataGridTextColumConnectorLogo" Width="auto" MinWidth="50" CanUserResize="False">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<materialDesign:PackIcon Width="40" Height="40">
<materialDesign:PackIcon.Style>
<Style TargetType="materialDesign:PackIcon">
<Setter Property="Kind" Value="PipeDisconnected"></Setter>
<Setter Property="Visibility" Value="Collapsed" ></Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding ConnectorType}" Value="ads">
<Setter Property="Kind" Value="AlphaBBox"></Setter>
<Setter Property="Visibility" Value="Visible" ></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</materialDesign:PackIcon.Style>
</materialDesign:PackIcon>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
但是有些列我无法设置 minwith,因为我不知道内容的大小。所以我把它们设置为 width=auto 但是如何在调整数据网格大小时防止它们被拉伸?是否可以绑定单元格内元素的宽度来强制执行此操作?
您可以处理 SizeChanged
等事件,并在该事件处理程序中将列的 MinWidth
属性 设置为其计算的 ActualWidth
。
我有一个数据网格,其中列的宽度差异很大。它们不是自动生成的。当包含数据网格的 window 调整大小时,我想防止其中一些列被拉伸。
datagrid的定义在XAML
中是这样的<DataGrid x:Name="DatagridControl" Grid.Row="1" CanUserAddRows="False" SelectionMode="Single" SelectionUnit="FullRow" AutoGenerateColumns="false" ItemsSource="{Binding Variables, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectedItem="{Binding SelectedVariable, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" BeginningEdit="DatagridControl_BeginningEdit" HeadersVisibility="Column" FontSize="16">
我有一些列,其中我知道最小大小是多少,所以它们是这样定义的,并且它按我想要的方式工作
<DataGridTemplateColumn x:Name="dataGridTextColumConnectorLogo" Width="auto" MinWidth="50" CanUserResize="False">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<materialDesign:PackIcon Width="40" Height="40">
<materialDesign:PackIcon.Style>
<Style TargetType="materialDesign:PackIcon">
<Setter Property="Kind" Value="PipeDisconnected"></Setter>
<Setter Property="Visibility" Value="Collapsed" ></Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding ConnectorType}" Value="ads">
<Setter Property="Kind" Value="AlphaBBox"></Setter>
<Setter Property="Visibility" Value="Visible" ></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</materialDesign:PackIcon.Style>
</materialDesign:PackIcon>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
但是有些列我无法设置 minwith,因为我不知道内容的大小。所以我把它们设置为 width=auto 但是如何在调整数据网格大小时防止它们被拉伸?是否可以绑定单元格内元素的宽度来强制执行此操作?
您可以处理 SizeChanged
等事件,并在该事件处理程序中将列的 MinWidth
属性 设置为其计算的 ActualWidth
。