【发布时间】:2020-11-05 21:29:09
【问题描述】:
我正在尝试设置自动生成的DataGrid 列的TextBox 以使用行为来换行文本。但是,在AutoGeneratingColumn 事件期间设置属性不起作用。我设置了正确的属性还是有什么问题?
这是DataGrid 的 XAML:
<DataGrid x:Name="TableGrid" ItemsSource="{Binding GridData}" AutoGenerateColumns="True">
<i:Interaction.Behaviors>
<b:AutoHeaderBehavior/>
</i:Interaction.Behaviors>
</DataGrid>
这是行为的代码:
public class AutoHeaderBehavior : Behavior<DataGrid>
{
protected override void OnAttached()
{
base.OnAttached();
this.AssociatedObject.AutoGeneratingColumn += OnGeneratingColumn;
}
protected override void OnDetaching()
{
this.AssociatedObject.AutoGeneratingColumn -= OnGeneratingColumn;
base.OnDetaching();
}
private void OnGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
if (e.PropertyDescriptor is PropertyDescriptor descriptor)
{
e.Column.Header = descriptor.DisplayName ?? descriptor.Name;
if (descriptor.DisplayName == "Description")
{
var wrapping = new Setter() { Property = TextBox.TextWrappingProperty, Value = TextWrapping.Wrap };
var style = new Style(typeof(TextBox));
style.Setters.Add(wrapping);
(e.Column as DataGridTextColumn).ElementStyle = style;
e.Column.Width = 300;
}
}
else
e.Cancel = true;
}
}
【问题讨论】: