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?
Réponses
Trop de publicités?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.
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;
}
}