zoukankan      html  css  js  c++  java
  • 在WPF的DataGrid中对行添加单击事件

    在做的一个c#的项目中发现Datagrid没办法直接对鼠标单击进行响应,调用MouseDown事件也需要点击某一行第二次才能响应。所以借助EventSetter来简单的实现了一个。

    界面部分的代码

            <DataGrid x:Name="dataGrid" HorizontalAlignment="Left" Margin="10,38,0,0"
                      VerticalAlignment="Top" Height="257" FontSize="13.333"
                      AutoGenerateColumns="False" AlternationCount="2" CanUserAddRows="False"
                      MinWidth="504" Width="513" SelectionUnit="FullRow">
    
    
                <DataGrid.RowStyle>
                    <Style  TargetType="DataGridRow">
                        <EventSetter Event="GotFocus" Handler="Item_GotFocus"/>
                    </Style>
                </DataGrid.RowStyle>
                <DataGrid.Columns>
                    <DataGridCheckBoxColumn />
                    <DataGridTextColumn Header="歌曲名" Width="200" Binding="{Binding Path=Title}" IsReadOnly="True"/>
                    <DataGridTextColumn Header="艺术家" Width="127" Binding="{Binding Path=Artist}" IsReadOnly="True"/>
                    <DataGridTextColumn Header="专辑" Width="140" Binding="{Binding Path=Album}" IsReadOnly="True"/>
                </DataGrid.Columns>
            </DataGrid>

    对应的c#的代码

            private void Item_GotFocus(object sender, RoutedEventArgs e)
            {
                var item = (DataGridRow)sender;
                FrameworkElement objElement = dataGrid.Columns[0].GetCellContent(item);
                if (objElement != null)
                {
                    CheckBox objChk = (CheckBox)objElement;
                    objChk.IsChecked = !objChk.IsChecked;
                }
            }

    附上用mousedown事件的代码

            private void DataGrid_MouseDown(object sender, MouseButtonEventArgs e)
            {
                if (e.LeftButton == MouseButtonState.Pressed)
                {
                    var se = dataGrid.SelectedItem;
                    FrameworkElement objElement = dataGrid.Columns[0].GetCellContent(se);
                    if (objElement != null)
                    {
                        CheckBox objChk = (CheckBox)objElement;
                        objChk.IsChecked = !objChk.IsChecked;
                    }
                }
            }

    需要在这个界面的构造函数中添加

     dataGrid.MouseDown += DataGrid_MouseDown;
    • 1

    再附上一个效果图 
    这里写图片描述

  • 相关阅读:
    C++内存管理
    多线程和多进程的区别(C++)
    如何用C语言封装 C++的类,在 C里面使用
    C/C++将一个整型数组拼接成一个字符串
    C代码中如何调用C++ C++中如何调用C
    Application对象的使用-数据传递以及内存泄漏
    《鸟哥的Linux私房菜》读书笔记二
    《鸟哥的Linux私房菜》读书笔记一
    greenDaoMaster的学习研究
    Handler 引起的内存泄露
  • 原文地址:https://www.cnblogs.com/sjqq/p/8454542.html
Copyright © 2011-2022 走看看