zoukankan      html  css  js  c++  java
  • WPF的DataGrid当SelectionUnit为DataGridSelectionUnit.Cell时RowDetailsVisibilityMode无效问题

    DataGrid当SelectionUnit设置为DataGridSelectionUnit.Cell方式时:
    RowDetailsVisibilityMode无论置为DataGridRowDetailsVisibilityMode.Visible还是/DataGridRowDetailsVisibilityMode.VisibleWhenSelected均无法显示行详细信息(RowDetails)内容。这是DataGrid本身的使用限制,有时我们确实不想整行(FullRow)选择,那么可以使用下面变通的方式使得行详细信息内容显示或隐藏。思路是给DataGrid应用一个数据触发器,将DetailsVisibility属性与实体的IsSelected(实体包含该属性并且实现接口INotifyPropertyChanged)属性进行关联;然后订阅DataGrid的CurrentCellChanged事件,在事件处理方法中设置绑定实体的IsSelected属性就能解决上述问题了。具体见下面代码:

    <DataGrid.RowStyle>
        <Style TargetType="{x:Type DataGridRow}" >
            <Setter Property="DetailsVisibility" Value="Collapsed" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=IsSelected}" Value="true">
                    <Setter Property="DetailsVisibility" Value="Visible" />
                </DataTrigger>
                <DataTrigger Binding="{Binding Path=IsSelected}" Value="false">
                    <Setter Property="DetailsVisibility" Value="Collapsed" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGrid.RowStyle>

    事件处理方法如下:

    void dg_CurrentCellChanged(object sender, EventArgs e)
    {
        DataGrid dg = sender as DataGrid;
        RegisterTransaction o = dg.CurrentItem as RegisterTransaction;
        foreach (var item in CheckBook.Register)
        {
            if (item.IsSelected) item.IsSelected = false;
        }
        o.IsSelected = true;
    }
  • 相关阅读:
    修改微信电脑版的字体
    今天把自己的ocr镜像开源了
    写点恐怖小说为自己打call
    分享一波目前写的最强的autohotkey 插件
    分享一个我改进过的ocr算法
    从git源码安装zabbix-agent
    windows bat更改系统时间 & 同步internet时间
    Jmeter执行多条Mysql语句报错
    性能测试图片总结
    Jmeter beanshell 生成手机号加密签名
  • 原文地址:https://www.cnblogs.com/chriskwok/p/2654594.html
Copyright © 2011-2022 走看看