我想知道是否有可能在数据网格的左上角添加功能“全选”按钮,这样它也取消选择所有行? 我有连接到一个按钮,做了这样的方法,但是这将是巨大的,如果我可以从选择解雇该方法的所有按钮,保持功能在视图中的相同部分。 可这“全选”按钮添加到它的代码,如果是这样,怎么会得到该按钮? 我一直没能找到任何实例或建议。
Answer 1:
很多搜索后,确定我发现了怎么办得到科林埃伯哈特,这里的按钮:
造型难以触及的控制模板元素与附加的行为
然后,我在他的课延长“Grid_Loaded”的方法将事件处理程序添加到按钮,但记得要删除默认的第一个“全选”命令(否则,运行我们添加了事件处理程序后,该命令获取运行)。
/// <summary>
/// Handles the DataGrid's Loaded event.
/// </summary>
/// <param name="sender">Sender object.</param>
/// <param name="e">Event args.</param>
private static void Grid_Loaded(object sender, RoutedEventArgs e)
{
DataGrid grid = sender as DataGrid;
DependencyObject dep = grid;
// Navigate down the visual tree to the button
while (!(dep is Button))
{
dep = VisualTreeHelper.GetChild(dep, 0);
}
Button button = dep as Button;
// apply our new template
ControlTemplate template = GetSelectAllButtonTemplate(grid);
button.Template = template;
button.Command = null;
button.Click += new RoutedEventHandler(SelectAllClicked);
}
/// <summary>
/// Handles the DataGrid's select all button's click event.
/// </summary>
/// <param name="sender">Sender object.</param>
/// <param name="e">Event args.</param>
private static void SelectAllClicked(object sender, RoutedEventArgs e)
{
Button button = sender as Button;
DependencyObject dep = button;
// Navigate up the visual tree to the grid
while (!(dep is DataGrid))
{
dep = VisualTreeHelper.GetParent(dep);
}
DataGrid grid = dep as DataGrid;
if (grid.SelectedItems.Count < grid.Items.Count)
{
grid.SelectAll();
}
else
{
grid.UnselectAll();
}
e.Handled = true;
}
本质上,如果任何行未被选中“选择所有”,如果不是它的未选中所有'。 它的工作原理非常像你所期望的选择/取消选择所有的工作,我不能相信他们并没有使该命令在默认情况下做到这一点,说实话,也许在下一版本中。
希望这可以帮助别人,无论如何,欢呼声,将
Answer 2:
我们可以添加到的CommandBinding处理全选的事件。
请参阅: 事件全部选择:WPF的Datagrid
文章来源: WPF Datagrid “Select All” button - “Unselect All” too?