【问题标题】:WPF DataGrid TargetType="DataGridRow" not working for Event="MouseDoubleClick"WPF DataGrid TargetType="DataGridRow" 不适用于 Event="MouseDoubleClick"
【发布时间】:2017-11-11 00:19:03
【问题描述】:

我正在尝试在 DataGrid 行上添加一个 onclick 事件,但它不适用于我的代码。它仅在TargetType="DataGridCell" 时有效。这是我的数据网格;

<DataGrid Name="CourtCasesGrid" Grid.Column="0" BeginningEdit="dataGrid_BeginningEdit" Grid.Row="0" SelectedItem="{Binding SelectedCourtCase}" CanUserReorderColumns="True" CanUserResizeColumns="True" CanUserResizeRows="False" CanUserSortColumns="True">
    <DataGrid.Resources>
        <Style TargetType="DataGridRow">
            <EventSetter Event="MouseDoubleClick" Handler="CourtCasesGridRowDoubleClick"/>
        </Style>
    </DataGrid.Resources>
</DataGrid>

【问题讨论】:

    标签: c# wpf datagrid


    【解决方案1】:

    我已经解决了这个问题,并成功地双击了触发事件的所选行,同样允许收集行的值。我已经使用 Code-Behind 完成了这项工作,但如果这对您有用,也可以使用 MVVM 方法来提供帮助。

    这是“MainWindow.xaml”代码隐藏:

    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    
    /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            public DataGridRow SelectedRow { get; set; }
            public ObservableCollection<CourtCase> CourtCases { get; set; }
            public MainWindow()
            {
                InitializeComponent();
    
                CourtCases = new ObservableCollection<CourtCase>();
                CourtCases.Add(new CourtCase("1"));
                CourtCases.Add(new CourtCase("2"));
                CourtCases.Add(new CourtCase("3"));
                CourtCases.Add(new CourtCase("4"));
    
                SelectedRow = new DataGridRow();
    
                CourtCasesGrid.DataContext = CourtCases;
            }
    
            private void CourtCasesGridRowDoubleClick(object sender, MouseButtonEventArgs e)
            {
                DataGridRow row = sender as DataGridRow;
            }
        }
    

    这是“MainWindow.xaml”视图:

    <Grid>
            <DataGrid ItemsSource="{Binding CourtCases,RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}"  Name="CourtCasesGrid" ColumnWidth="*"
                      SelectionUnit="FullRow">
                <DataGrid.Resources>
                    <Style TargetType="DataGridRow">
                        <EventSetter Event="MouseDoubleClick" Handler="CourtCasesGridRowDoubleClick"/>
                    </Style>
                </DataGrid.Resources>
            </DataGrid>
        </Grid>
    

    甚至是我用来保存法庭数据的简单类,供您参考:

     public class CourtCase
    {
        public string Name { get; set; }
        public CourtCase()
        {
            Name = "";
        }
        public CourtCase(string n)
        {
            Name = n;
        }
    }
    

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2023-04-08
      • 1970-01-01
      • 2014-07-25
      • 1970-01-01
      • 2014-03-02
      • 1970-01-01
      • 1970-01-01
      • 2015-07-03
      • 2020-05-18
      相关资源
      最近更新 更多