WPF DataGrid的可见性
2021-03-07 04:27
标签:blog tle alignment generate zab public idt sso width
使用WPF的DataGrid的时候 会自定义列或者是绑定某些属性。 但是通常有些问题,获取不到或者没有数据。 因为Column是属性所以并不在逻辑树和视觉树中。 此时可以通过代理类来做中间部分。 将某些属性放置到或者绑定到这个类,DataGird的列在通过绑定就可以获取数据。 例如自定义HeaderTemplate,里面的数据则是不可以获取DataContext。通过此方法就可以了(如果可以尽可能修改HeaderStyle,Style中的TagetType设置为DataGridColumnHeader,并修改Template) 另外一种方式是继承Freezable 这样可以写依赖属性。再通过绑定就可以获取到 WPF DataGrid的可见性 标签:blog tle alignment generate zab public idt sso width 原文地址:https://www.cnblogs.com/lonelyxmas/p/12833893.html FrameworkElement Width="{Binding ElementName=DT1,Path=ActualWidth}" DataContext="{Binding ElementName=DG,Path=ItemsSource}" x:Name="f1"/>
DataGrid x:Name="DG" AutoGenerateColumns="False" >
DataGrid.Columns>
DataGridTextColumn Header="课程名称" Binding="{Binding SbjName}" Width="150">
DataGridTextColumn.HeaderTemplate>
DataTemplate>
Grid >
TextBlock Text="{Binding}" HorizontalAlignment="Center" MinHeight="50"/>
Grid>
DataTemplate>
DataGridTextColumn.HeaderTemplate>
DataGridTextColumn>
DataGridTemplateColumn>
DataGridTemplateColumn.HeaderTemplate>
DataTemplate>
Grid DataContext="{Binding Source={x:Reference f1}, Path=DataContext}">
Grid>
DataTemplate>
DataGridTemplateColumn.HeaderTemplate>
DataGridTemplateColumn>
DataGrid.Columns>
DataGrid>
class CD : Freezable
{
protected override Freezable CreateInstanceCore()
{
return new CD();
}
public object Data
{
get { return (object)GetValue(DataProperty); }
set { SetValue(DataProperty, value); }
}
public static readonly DependencyProperty DataProperty =DependencyProperty.Register("Data", typeof(object), typeof(CD));
}
DataGrid x:Name="DG" AutoGenerateColumns="False" >
DataGrid.Resources>
local:CD x:Key="c" x:Name="cd" Data="{Binding ElementName=DG, Path=ItemsSource}"/>
DataGrid.Resources>
DataGrid.Columns>
DataGridTextColumn Header="课程名称" Binding="{Binding SbjName}" Width="150">
DataGridTextColumn.HeaderTemplate>
DataTemplate>
Grid >
TextBlock Text="{Binding}" HorizontalAlignment="Center" MinHeight="50"/>
Grid>
DataTemplate>
DataGridTextColumn.HeaderTemplate>
DataGridTextColumn>
DataGridTemplateColumn>
DataGridTemplateColumn.HeaderTemplate>
DataTemplate>
Grid x:Name="G1" Tag="{Binding Source={StaticResource c }, Path=Data}">
TextBlock Text="{Binding ElementName=G1,Path=Tag[1].SbjName}"/>
Grid>
DataTemplate>
DataGridTemplateColumn.HeaderTemplate>
DataGridTemplateColumn>
DataGrid.Columns>
DataGrid>