Não há ListBox.SelectionMode = “None”, existe outra maneira de desabilitar a seleção em uma checkbox de listview?

Como desabilito a seleção em um ListBox?

    Abordagem 1 – ItemsControl

    A menos que você precise de outros aspectos do ListBox , você pode usar o ItemsControl . Ele coloca itens no ItemsPanel e não possui o conceito de seleção.

      

    Por padrão, o ItemsControl não oferece suporte à virtualização de seus elementos filhos. Se você tiver muitos itens, a virtualização pode reduzir o uso de memory e melhorar o desempenho. Nesse caso, você pode usar a abordagem 2 e estilizar a ListBox ou adicionar virtualização ao seu ItemsControl .

    Abordagem 2 – ListBox estilo

    Como alternativa, apenas estilize o ListBox de forma que a seleção não fique visível.

        

    Eu encontrei uma solução muito simples e direta trabalhando para mim, espero que faça bem para você também

          

    Você pode alternar para usando um ItemsControl vez de um ListBox . Um ItemsControl não tem nenhum conceito de seleção, então não há nada para desligar.

    Outra opção que vale a pena considerar é desabilitar os ListBoxItems. Isso pode ser feito definindo o ItemContainerStyle conforme mostrado no snippet a seguir.

          

    Se você não quiser que o texto fique cinza, poderá especificar a cor desativada, adicionando um pincel aos resources do estilo com a seguinte chave: {x: Static SystemColors.GrayTextBrushKey}. A outra solução seria replace o modelo de controle ListBoxItem.

    Isso também funcionará, se eu tiver a necessidade de usar listbox em vez de itemscontrol, mas apenas exibir os itens que não devem ser selecionáveis, eu uso:

        

    Embora a resposta de @Drew Noakes seja uma solução rápida para a maioria dos casos, há uma falha que vem com a configuração dos pincéis x: Static.

    Quando você definir os pincéis x: Static conforme sugerido, todos os controles filhos dentro do item da checkbox de listview herdarão esse estilo.

    Isso significa que, embora isso funcione para desabilitar o realce do item da checkbox de listview, isso pode resultar em efeitos indesejados para os controles filho.

    Por exemplo, se você tivesse uma checkbox de combinação dentro de seu ListBoxItem, seria desabilitar o mouse sobre realce dentro da checkbox de combinação.

    Em vez disso, considere a definição de VisualStates para os events Selecionados, Não Selecionados e MouseOver, conforme abordado na solução mencionada neste thread stackoverflow: Remover Controle Realçar De ListBoxItem, mas não controles filhos .

    -Finze

    Muito boas respostas aqui, mas eu estava procurando por algo um pouco diferente: eu quero seleção, mas só não quero que seja mostrado (ou mostrado em um assunto diferente).

    As soluções acima não funcionaram para mim (completamente), então fiz outra coisa: usei um novo estilo para minha checkbox de listview, que redefine completamente os modelos:

                

    Começando com isso, você pode facilmente adicionar seu próprio destaque de seleção, ou deixá-lo assim, se você não quer nada.

    Talvez você precise apenas de uma funcionalidade do ItemsControl? Não permite seleção:

      

    Nota: Esta solução não desativa a seleção pela navegação do teclado ou pelo clique direito (ou seja, teclas de seta seguidas pela tecla de espaço)

    Todas as respostas anteriores removem a capacidade de selecionar completamente (sem alternar em tempo de execução) ou simplesmente remover o efeito visual, mas não a seleção.

    Mas e se você quiser ser capaz de selecionar e mostrar a seleção pelo código, mas não pela input do usuário? Pode ser que você queira “congelar” a seleção do usuário sem desabilitar toda a checkbox de listview?

    A solução é envolver todo o ItemsContentTemplate em um Button sem cromo visual. O tamanho do botão deve ser igual ao tamanho do item, por isso é completamente coberto. Agora use a Propriedade IsEnabled do botão:

    Ative o botão para “congelar” o estado de seleção do item. Isso funciona porque o botão ativado consome todos os events do mouse antes que eles cheguem ao ListboxItem-Eventhandler. Seu ItemsDataTemplate ainda receberá MouseEvents porque é parte do conteúdo dos botões.

    Desative o botão para ativar a alteração da seleção clicando em.

         

    dartrax

    Você pode colocar um bloco de texto acima da sua checkbox de listview, ele não mudará a aparência do seu aplicativo e também não permitirá a seleção de nenhum item.

    Uma correção simples que funciona no Windows Phone, por exemplo, está na seleção do item selecionado como nulo:

       

    E no código por trás:

      private void ListBox_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e) { (sender as ListBox).SelectedItem = null; } 

    Para mim, a melhor solução é:

         

    Eu encontrei um caminho perfeito.
    Defina ListBox IsHitTestVisible como false para que o usuário não possa passar o mouse, rolar para baixo ou rolar para cima.
    Capture PreviewGotKeyboardFocus e.Handled = true para que o usuário possa selecionar o item pela aba do teclado, seta para cima, seta para baixo.

    Desta forma vantagem:

    1. Os itens do ListBox Foreground não se tornarão cinza.
    2. ListBox Background pode ser definido como Transparent

    xmal

                      

    código

     private void StudentsListBox_PreviewGotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) { e.Handled = true; } 

    IsEnabled = false

    A resposta de Hallgeir Engen é uma boa solução, mas o problema é que depois de postar de volta, todos os itens se tornam selecionáveis ​​novamente, então você requer que no Page_Load adicione cada ListItem ao atributo disabled.

    Mas há uma solução ainda mais simples.

    Em vez de desabilitar todos os ListItems, você pode desabilitar a ListBox uma vez , e todos os itens da lista também estão desabilitados. set Enabled para false, não desativa o ListBox, mas adicionando a seguinte linha no Page_Load :

     this.listbox.Attributes.Add("disabled", "disabled"); 

    Depois de postar de volta, os itens não se tornam selecionáveis, então você pode colocar esta linha de código em:

     if (!this.IsPostBack) { } 

    Mas todos os itens ainda são cinza, então se você quiser colorir todos os itens, faça a class css:

     .ListItemColor option { color: Black; /*(default color for list item, if it is not disabled)*/ } 

    Em seguida, defina o CssClass da ListBox para esta class css acima. Se você quiser colorir alguns itens da lista (mas não todos), então você terá que estilizar alguns itens e dar a cada um a sua cor através da fonte (marcação) ou código (javascript, c # ou Visual Basic).

    Para desativar uma ou mais opções na sua checkbox de listview / lista suspensa, você pode adicionar o atributo “desativado”, conforme mostrado abaixo. Isso impede que o usuário selecione essa opção e obtém uma sobreposição cinza.

     ListItem item = new ListItem(yourvalue, yourkey); item.Attributes.Add("disabled","disabled"); lb1.Items.Add(item);