65 votes

rendre les éléments Listbox dans WPF non sélectionnables

J'ai une zone de liste dans WPF, et quand ils sélectionnent un élément, il affiche des couleurs laides Puis-je rendre tous les éléments non sélectionnables?

102voto

Thomas Levesque Points 141081

Si vous n'avez pas besoin de sélection, utilisez un ItemsControl plutôt qu'un ListBox

43voto

Vadym Kyrylkov Points 1

Ajoutez la propriété Focusable comme false dans le style ListBoxItem:

 <Style x:Key="{x:Type ListBoxItem}" TargetType="{x:Type ListBoxItem}">
  <!-- Possibly other setters -->
  <Setter Property="Focusable" Value="False" />
</Style>
 

15voto

4imble Points 3494

Si vous ne voulez pas qu'ils soient sélectionnables, vous ne voulez probablement pas de liste. Mais si c'est ce dont vous avez vraiment besoin, vous pouvez le faire avec un style:

 <Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Page.Resources>


<Style x:Key="{x:Type ListBoxItem}" TargetType="{x:Type ListBoxItem}">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="{x:Type ListBoxItem}">
        <Border 
          Name="Border"
          Padding="2"
          SnapsToDevicePixels="true">
          <ContentPresenter />
        </Border>
        <ControlTemplate.Triggers>
          <Trigger Property="IsSelected" Value="true">
            <Setter TargetName="Border" Property="Background" Value="#DDDDDD"/>
          </Trigger>
          <Trigger Property="IsEnabled" Value="false">
            <Setter Property="Foreground" Value="#888888"/>
          </Trigger>
        </ControlTemplate.Triggers>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

  </Page.Resources>
  <Grid>  
    <ListBox>
      <ListBoxItem>One</ListBoxItem>
      <ListBoxItem>Two</ListBoxItem>
      <ListBoxItem>Three</ListBoxItem>
    </ListBox>
  </Grid>
</Page>
 

Regardez le déclencheur IsSelected. Vous pouvez attribuer une couleur différente à la bordure afin qu’elle ne soit pas "laide" ou la définir sur transparent afin qu’elle ne soit pas visible une fois sélectionnée.

J'espère que cela t'aides.

9voto

Denise Draper Points 109

Il existe un moyen encore plus simple: définissez ListBox property IsHitTestVisible="False" . Cela empêche tous les éléments de la liste de recevoir des événements de souris. Cela présente l’avantage d’arrêter la surbrillance lorsque vous passez la souris.

Cela fonctionne pour moi dans WP 7.1.

3voto

tornacious Points 21

Un moyen simple de procéder (en utilisant la réponse de viky ci-dessus) consiste à définir l'index sélectionné sur -1 dans SelectionChanged (), comme suit.

 public void OnListView_SelectionChanged(Object sender, RoutedEventArgs e)
{
    if (null != sender && sender is ListView)
    {
        ListView lv = sender as ListView;
        lv.SelectedIndex = -1;
    }
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X