Eu tenho um DataGrid com primeira coluna como coluna de texto e segunda coluna como coluna CheckBox. O que eu quero é se eu clicar na caixa de seleção. Deve ser verificado.
Porém, são necessários dois cliques para serem selecionados; para o primeiro clique, a célula está sendo selecionada; para os segundos cliques, a caixa de seleção está sendo marcada. Como fazer com que a caixa de seleção seja marcada / desmarcada com um único clique.
Estou usando o WPF 4.0. As colunas no DataGrid são geradas automaticamente.
wpf
datagrid
wpfdatagrid
Prince Ashitaka
fonte
fonte
Respostas:
Para a caixa de seleção DataGrid com um único clique, basta colocar o controle regular da caixa de seleção dentro
DataGridTemplateColumn
e definirUpdateSourceTrigger=PropertyChanged
.fonte
DataGridTemplateColumn.CellTemplate
com o seu próprio Binding e ele funcionará !! A resposta de @ weidian-huang me ajudou a entender isso, obrigado!Eu resolvi isso com o seguinte estilo:
É claro que é possível adaptar isso ainda mais a colunas específicas ...
fonte
Primeiro, eu sei que essa é uma pergunta bastante antiga, mas ainda pensei em tentar responder.
Eu tive o mesmo problema há alguns dias e me deparei com uma solução surpreendentemente curta para isso (consulte este blog ). Basicamente, tudo que você precisa fazer é substituir a
DataGridCheckBoxColumn
definição no seu XAML pelo seguinte:A vantagem desta solução é óbvia - é somente XAML; assim, evita que você sobrecarregue seu código de retorno com lógica adicional da interface do usuário e ajuda a manter seu status aos olhos dos fanáticos do MVVM;).
fonte
Para tornar a resposta de Konstantin Salavatov trabalho com
AutoGenerateColumns
, adicionar um manipulador de eventos para osDataGrid
'sAutoGeneratingColumn
com o seguinte código:Isso fará com que todas
DataGrid
as colunas de caixa de seleção geradas automaticamente sejam editáveis com "único clique".fonte
Baseado no blog mencionado na resposta do Goblin, mas modificado para funcionar no .NET 4.0 e com o Modo de Seleção de Linha.
Observe que ele também acelera a edição do DataGridComboBoxColumn - entrando no modo de edição e exibindo a lista suspensa com um único clique ou entrada de texto.
XAML:
Código por trás:
fonte
Eu tentei essas sugestões e muitas outras que encontrei em outros sites, mas nenhuma delas funcionou para mim. No final, criei a seguinte solução.
Eu criei meu próprio controle herdado do DataGrid e simplesmente adicionei esse código a ele:
O que tudo isso faz?
Bem, cada vez que clicamos em qualquer célula do nosso DataGrid, vemos se a célula contém um controle CheckBox dentro dela. Se isso acontecer , definiremos o foco para essa caixa de seleção e alternaremos seu valor .
Isso parece funcionar para mim e é uma solução agradável e facilmente reutilizável.
É decepcionante que precisamos escrever código para fazer isso. A explicação de que o primeiro clique do mouse (na caixa de seleção de um DataGrid) é "ignorada", pois o WPF a utiliza para colocar a linha no modo de edição pode parecer lógica, mas no mundo real, isso contraria o modo como todos os aplicativos reais funcionam.
Se um usuário vir uma caixa de seleção na tela, ele poderá clicar nela uma vez para marcar / desmarcar. Fim da história.
fonte
Existe uma solução muito mais simples aqui.
Se você costuma
DataGridCheckBoxColumn
implementar, o primeiro clique é o foco, o segundo clique é o de verificar.Mas usar
DataGridTemplateColumn
para implementar precisa apenas de um clique.A diferença de uso
DataGridComboboxBoxColumn
e implementaçãoDataGridTemplateColumn
também é semelhante.fonte
Eu resolvi com isso:
A caixa de seleção ativa em um único clique!
fonte
Com base na resposta de Jim Adorno e comentários em seu post, esta é a solução com
MultiTrigger
:fonte
Outra solução simples é adicionar esse estilo ao seu DataGridColumn. O corpo do seu estilo pode estar vazio.
fonte
fonte