为什么 DataGridComboBoxColumn CellStyle 不会应用填充



有些日子,我真的很后悔曾经将WPF用于应用程序...

我正在尝试使用DataGridComboBoxColumn,我想做的只是在未编辑单元格中的文本时对文本应用填充,但似乎他们使这是一项不可能完成的任务

<Window.Resources>
<CollectionViewSource x:Key="Statuses" Source="{Binding Path=Statuses}" />        
</Window.Resources>
<DataGridComboBoxColumn Header="Status"
Width="100"
ItemsSource="{Binding Source={StaticResource Statuses}}"
DisplayMemberPath="Description"
SelectedValuePath="Index"
SelectedValueBinding="{Binding Path=Status}">
<DataGridComboBoxColumn.CellStyle>
<Style TargetType="{x:Type DataGridCell}">
<Setter Property="Padding" Value="4,2" />
</Style>
</DataGridComboBoxColumn.CellStyle>
</DataGridComboBoxColumn>

我尝试设置ElementStyle并覆盖Template但这只会导致一些奇怪的验证错误,并且在快速互联网搜索后,这似乎是一个糟糕的选择。

然后,我求助于使用DataGridTemplateColumn,但这让我尝试将绑定值转换回与ComboBoxDisplayMemberPath相同的文本,并且我尝试使用ValueConverter失败,因为它从未从我的CollectionViewSource"状态"传递值。

现在我已经没有耐心了,只能接受我无法为这些单元格设计样式的事实,除非有人有快速可靠的解决方法?

编辑:我创建了一个GitHub存储库,其中包含我正在尝试执行的示例,还有一个名为"值转换器"的分支,我尝试实现IValueConverter和使用DataGridTemplateColumn失败。

解决此问题的最简单方法可能是定义自定义ComboBoxColumn并设置GenerateElement方法中生成的元素的Margin属性:

public class CustomComboBoxColumn : System.Windows.Controls.DataGridComboBoxColumn
{
protected override FrameworkElement GenerateElement(DataGridCell cell, object dataItem)
{
FrameworkElement fe = base.GenerateElement(cell, dataItem);
if (fe is Control control)
control.Margin = new Thickness(4, 2, 4, 2);
return fe;
}
}

用法:

<local:CustomComboBoxColumn Header="Status"
Width="100"
ItemsSource="{Binding Source={StaticResource Statuses}}"
DisplayMemberPath="Description"
SelectedValuePath="Index"
SelectedValueBinding="{Binding Path=Status}" />

最新更新