zoukankan      html  css  js  c++  java
  • WPF DataGrid的可见性

    使用WPF的DataGrid的时候 会自定义列或者是绑定某些属性。

    但是通常有些问题,获取不到或者没有数据。

    因为Column是属性所以并不在逻辑树和视觉树中。

    此时可以通过代理类来做中间部分。

    将某些属性放置到或者绑定到这个类,DataGird的列在通过绑定就可以获取数据。

    例如自定义HeaderTemplate,里面的数据则是不可以获取DataContext。通过此方法就可以了(如果可以尽可能修改HeaderStyle,Style中的TagetType设置为DataGridColumnHeader,并修改Template

     <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>

    另外一种方式是继承Freezable

    这样可以写依赖属性。再通过绑定就可以获取到

     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>
  • 相关阅读:
    Html-浅谈如何正确给table加边框
    如何在移动设备上调试html5开发的网页
    swiper嵌套小demo(移动端触摸滑动插件)
    移动端如何用swiper实现导航栏效果
    background-color:transparent
    点击按钮 发送短信验证码后60秒倒计时
    placeholder的样式设置
    linux 定时任务crontab
    laravel学习一
    centos 7安装jdk
  • 原文地址:https://www.cnblogs.com/T-ARF/p/12182465.html
Copyright © 2011-2022 走看看