• WPF Datagrid对鼠标单击进行响应,借助EventSetter


    在做的一个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;
  • 相关阅读:
    懵懵懂懂的样子
    scrollTop总是为0
    论搜索引擎的重要性
    利用swiper仿iphone时间设置滚轮控件
    厉害了,new Date().getTime()
    invalid Date!iphone上支持的时间格式
    我不知道的MIME
    设置canvas元素的宽高的奇妙(jiujie)发现
    用SVN在github下下载一个文件夹到本地
    c++ md5算法实现(转)
  • 原文地址:https://www.cnblogs.com/sunbingqiang/p/9993927.html
Copyright © 2020-2023  润新知