我正在使用WPF數據網格。在數據網格用戶中有列標題和行標題。選擇所有事件:WPF Datagrid
當列標題和行標題都可見時,在左上角我們有一個可用的小方形部分。 (列和行標題相交的左上角的橫截面)。當我們點擊它時,它將選擇數據網格中的所有單元格。有什麼事嗎?如果不是如何可以捕捉該事件。請指導我。
如果您需要關於此問題的任何其他信息,請告知我們。
問候, Priyank
我正在使用WPF數據網格。在數據網格用戶中有列標題和行標題。選擇所有事件:WPF Datagrid
當列標題和行標題都可見時,在左上角我們有一個可用的小方形部分。 (列和行標題相交的左上角的橫截面)。當我們點擊它時,它將選擇數據網格中的所有單元格。有什麼事嗎?如果不是如何可以捕捉該事件。請指導我。
如果您需要關於此問題的任何其他信息,請告知我們。
問候, Priyank
datagrid處理路由命令ApplicationCommand.SelectAll,因此如果網格具有焦點並且您按下Ctrl-A,或者您單擊了角落按鈕,則會選中所有單元格。
<DataGrid x:Name="dataGrid" .../>
<DataGrid.CommandBindings>
<CommandBinding Command="ApplicationCommands.SelectAll" Executed="SelectAll_Executed"/>
</DataGrid.CommandBindings>
或者,您可以添加的命令代碼綁定: 您可以通過在XAML添加的CommandBinding自己處理這個命令
public MyControl(){
InitializeComponent();
...
dataGrid.CommandBindings.Add(new CommandBinding(ApplicationCommands.SelectAll, SelectAll_Executed));
}
但是,只能有一個路由的單處理器命令,所以默認添加這個處理程序會阻止選擇所有在數據網格中工作。 因此,在您的處理程序中,您需要調用SelectAll。
private void SelectAll_Executed(object sender, ExecutedRoutedEventArgs e)
{
Debug.WriteLine("Executed");
dataGrid.SelectAll();
}
這不是一個相當不錯的解決方案,但你可以處理一個事件像「的SelectionChanged」,檢查所選項目的數量等於在你的數據源
我寧願避免在視圖中使用後面的代碼,所以我已經做到了這種方式:
這是對選擇/取消選擇所有左上角複選框。
將溶液從2份內置:附加屬性和特殊XAML結構:
1)。附加屬性:
public class DataGridSelectAllBehavior
{
public static bool GetValue(DependencyObject obj)
{
return (bool)obj.GetValue(ValueProperty);
}
public static void SetValue(DependencyObject obj, bool value)
{
obj.SetValue(ValueProperty, value);
}
public static readonly DependencyProperty ValueProperty =
DependencyProperty.RegisterAttached("Value", typeof(bool), typeof(DataGridSelectAllBehavior), new PropertyMetadata(false,
(o, e) =>
{
var dg = DataGridSelectAllBehavior.GetDataGrid(o);
CheckBox checkBox = o as CheckBox;
if (checkBox.IsChecked == true)
{
dg.SelectAll();
}
else
{
dg.UnselectAll();
}
}));
public static DataGrid GetDataGrid(DependencyObject obj)
{
return (DataGrid)obj.GetValue(DataGridProperty);
}
public static void SetDataGrid(DependencyObject obj, DataGrid value)
{
obj.SetValue(DataGridProperty, value);
}
public static readonly DependencyProperty DataGridProperty =
DependencyProperty.RegisterAttached("DataGrid", typeof(DataGrid), typeof(DataGridSelectAllBehavior), new PropertyMetadata(null));
}
2)XAML:
<DataGrid ItemsSource="{Binding PendingChanges}"
AutoGenerateColumns="False"
IsReadOnly="True"
SelectionMode="Extended">
<i:Interaction.Behaviors>
<behaviors:MultiSelectGridSelectedItemsBehavior SelectedItems="{Binding SelectedPendingChanges, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" />
</i:Interaction.Behaviors>
<DataGrid.Columns>
<DataGridCheckBoxColumn Binding="{Binding Path=IsSelected,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridRow}}}">
<DataGridCheckBoxColumn.HeaderTemplate>
<DataTemplate>
<CheckBox
behaviors:DataGridSelectAllBehavior.Value="{Binding IsChecked,RelativeSource={RelativeSource Self}}"
behaviors:DataGridSelectAllBehavior.DataGrid="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGrid}}}"/>
</DataTemplate>
</DataGridCheckBoxColumn.HeaderTemplate>
</DataGridCheckBoxColumn>
<DataGridTextColumn Header="Name"
Width="Auto"
Binding="{Binding Name, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" />
<DataGridTextColumn Header="State"
Width="Auto"
Binding="{Binding State, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" />
<DataGridTextColumn Header="Folder"
Width="*"
Binding="{Binding ParentFolderPath, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" />
</DataGrid.Columns>
</DataGrid>