我在WPF中有一个列表框,当他们选择一个项目时,它会显示一个难看的颜色 我可以让所有项目都不可选吗?
答案 0 :(得分:89)
如果您不需要选择,请使用ItemsControl
而不是ListBox
答案 1 :(得分:27)
在ListBoxItem样式中将Focusable属性添加为false:
<Style x:Key="{x:Type ListBoxItem}" TargetType="{x:Type ListBoxItem}">
<!-- Possibly other setters -->
<Setter Property="Focusable" Value="False" />
</Style>
答案 2 :(得分:13)
请在列表框中使用此内容。我找到了这个非常优雅的解决方案
<ListBox ItemsSource="{Binding YourCollection}">
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="Focusable" Value="False"/>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
答案 3 :(得分:12)
如果您不希望它们可选,那么您可能不想要列表视图。 但如果这是你真正需要的,那么你可以用一种风格来做:
<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>
查看IsSelected触发器。您可以将边框设置为不同的颜色,使其不“丑陋”或将其设置为透明,并且在选中时不会显示。
希望这有帮助。
答案 4 :(得分:4)
有一种更简单的方法:设置ListBox
属性IsHitTestVisible="False"
。这可以防止列表中的所有项目都接收鼠标事件。这样做的好处是可以在鼠标悬停时停止突出显示。
它适用于WP 7.1。
答案 5 :(得分:3)
一种简单的方法(使用上面的viky的答案)是在SelectionChanged()中将所选索引设置为-1,如下所示。
public void OnListView_SelectionChanged(Object sender, RoutedEventArgs e)
{
if (null != sender && sender is ListView)
{
ListView lv = sender as ListView;
lv.SelectedIndex = -1;
}
}
答案 6 :(得分:2)
最好避免事件,它更优雅,没有副作用Style标签。
<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>
答案 7 :(得分:1)
您可以处理ListBox的SelectionChanged事件,并在事件处理程序中取消选择所选项目。
答案 8 :(得分:1)
如果有人仍想要不可选择的ListBoxItem(或ListViewItem)功能。 http://thrash505.wordpress.com/2011/01/04/non-selectable-listboxitem-or-listviewitem-using-attached-properties/
答案 9 :(得分:0)
您还可以禁用列表框,它将为您提供静态的非交互式列表框。
<ListBox IsEnabled="False"/>
我认为这是解决方案尽可能简单。
答案 10 :(得分:0)
在我的例子中,我使用Textblock和ComboBox模板化了ListboxItems。唯一的#34;活跃的&#34;应该是组合......
<ScrollViewer VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled"
CanContentScroll="True" />
<ItemsControl>
....here my content....
</Itemscontrol>
</ScrollViewer>
按预期为我工作。 BR, 丹尼尔
答案 11 :(得分:0)
您还可以处理PreviewMouseDown事件
要防止点击,您可以设置KeyboardNavigation.TabNavigation="None"
<ListView x:Name="Cards"
.....
PreviewMouseDown="CardMonthsDescriptors_OnPreviewMouseDown"
KeyboardNavigation.TabNavigation="None"
>
...
private void Cards_OnPreviewMouseDown(object sender, MouseButtonEventArgs e)
{
e.Handled = true;
}