如何使DataGrid Row真正完全可选(单击非单元格区域)

时间:2013-10-20 09:37:16

标签: c# wpf

这个问题可能有点误导。

以下是DataGrid的屏幕截图,其中包含一些虚拟值(下面提供的代码) DGV

有没有办法让白色区域不被单元格覆盖?我的意图:我希望有完整的行选择。这可以通过SelectionUnit="FullRow"来实现,这很好但是如何让白色区域隐式选择整行而不用扩展宽度可用的单元格避免代码隐藏

这是repro代码: XAML:

<Window x:Class="DGVRowSelectTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" DataContext="{Binding RelativeSource={RelativeSource Self}}">
   <DataGrid ItemsSource="{Binding Names}" SelectionMode="Single" SelectionUnit="FullRow" >

   </DataGrid>
</Window>

虚拟代码背后(只设置两个条目)

using System.Collections.Generic;
using System.Windows;

namespace DGVRowSelectTest
{
    public partial class MainWindow : Window
    {
        private IList<KeyValuePair<string, string>> _names = new List<KeyValuePair<string, string>>{new KeyValuePair<string, string>("A1", "A2"),new KeyValuePair<string, string>("B1","B2")};
        public IList<KeyValuePair<string, string>> Names{get { return _names; }set { _names = value; }}

        public MainWindow()
        {
            InitializeComponent();
        }
    }
}

1 个答案:

答案 0 :(得分:3)

由于您已经提到过您不想扩展列宽。这可以通过(by providing dummy column at last without any binding and setting width to *)的hacky解决方案来实现。

您必须将AutoGenerateColumns设置为False,因为您现在明确指定了列。

    <DataGrid ItemsSource="{Binding Names}" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Name" Binding="{Binding Key}"/>
            <DataGridTextColumn Header="Name" Binding="{Binding Value}"/>
            <DataGridTemplateColumn Width="*"/>
        </DataGrid.Columns>
    </DataGrid>

快照 -

enter image description here