сделать элементы списка в WPF не выбираемыми
У меня есть список в WPF, и когда они выбирают элемент, он показывает уродливые цвета Могу ли я сделать все элементы не выбираемыми?
11 ответов:
добавить Фокусируемое свойство как false в стиле ListBoxItem:
<Style x:Key="{x:Type ListBoxItem}" TargetType="{x:Type ListBoxItem}"> <!-- Possibly other setters --> <Setter Property="Focusable" Value="False" /> </Style>
Если вы не хотите, чтобы они выбирались, то вы, вероятно, не хотите listview. Но если это то, что вам действительно нужно, то вы можете сделать это со стилем:
<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>
посмотрите на выбранный триггер. Вы можете сделать границу другого цвета, чтобы она не была "уродливой" или установить ее прозрачной, и она не будет видна при выборе.
надеюсь, что это помогает.
пожалуйста, используйте это в вашем списке. Я нашел это очень элегантное решение
<ListBox ItemsSource="{Binding YourCollection}"> <ListBox.ItemContainerStyle> <Style TargetType="{x:Type ListBoxItem}"> <Setter Property="Focusable" Value="False"/> </Style> </ListBox.ItemContainerStyle> </ListBox>
есть еще более простой способ: set
ListBox
свойстваIsHitTestVisible="False"
. Это предотвращает все элементы в списке от получения событий мыши. Это имеет преимущество остановки подсветки при наведении курсора мыши, а также.это работает для меня в WP 7.1.
простой способ сделать это (используя ответ от viky выше) - установить выбранный индекс на -1 в SelectionChanged (), как показано ниже.
public void OnListView_SelectionChanged(Object sender, RoutedEventArgs e) { if (null != sender && sender is ListView) { ListView lv = sender as ListView; lv.SelectedIndex = -1; } }
лучше избегать событий, это более элегантный и без побочных эффектов стиль тега.
<ListBox> <ListBox.ItemContainerStyle> <Style TargetType="ListBoxItem"> <Setter Property="IsEnabled" Value="False"/> </Style> </ListBox.ItemContainerStyle> <ListBox.ItemTemplate> <DataTemplate> <StackPanel> ... what you want as a source ... </StackPanel> </DataTemplate> </ListBox.ItemTemplate> </ListBox>
вы можете обрабатывать SelectionChanged событие ListBox и отменить выбор выбранного элемента в обработчике событий.
в случае, если кто-то все еще хочет не выбираемый ListBoxItem (или ListViewItem) функциональность. http://thrash505.wordpress.com/2011/01/04/non-selectable-listboxitem-or-listviewitem-using-attached-properties/
вы также можете сделать отключенный список, который даст вам статический, неинтерактивный список.
<ListBox IsEnabled="False"/>
Я думаю, что это решение как можно более простым.
в моем случае у меня были шаблонные ListboxItems с Textblock и ComboBox. Единственным "активным" должно быть комбо...
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" CanContentScroll="True" /> <ItemsControl> ....here my content.... </Itemscontrol> </ScrollViewer>
работал для меня, как и ожидалось. БРОМ, Даниэль