我尝试使用ListBox和UniformGrid创建带有两列的按钮列表。在我面临以下问题之前,一切似乎都很好。当我单击或悬停在按钮上时,按钮的边缘空间会以浅蓝色显示。如何消除这种影响?

这是我的密码:
<ListBox Width="1000" Grid.Row="1" VerticalAlignment="Top" VerticalContentAlignment="Top" Name="uniformGrid1" Margin="50" ItemsSource="{Binding SomeItemsList}">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="2" Background="Transparent" Name="uniformGrid1"></UniformGrid>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<Button Margin="50" Height="70" Click="keyword_Click" Width="250"
Foreground="Black" FontSize="16" FontFamily="Helvetica Neue" FontWeight="Bold"
BorderBrush="SlateGray" Content="{Binding Name}">
<Button.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="White" Offset="0.073" />
<GradientStop Color="White" Offset="1" />
<GradientStop Color="#FFE9E9F9" Offset="0.571" />
<GradientStop Color="#FFD7D7EC" Offset="0.243" />
</LinearGradientBrush>
</Button.Background>
</Button>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>发布于 2021-11-30 10:47:21
ItemsSource中的每个项都被包装在ListBox中的一个ListBoxItem中。ListBox是从Selector派生的控件,它是允许选择项的项的基本类型。
表示允许用户从其子元素中选择项的控件。
您指定的DataTemplate将在运行时放置在ListBoxItem中,这是内容的容器。这个容器有一个默认样式和控制模板,它定义了它的外观和可视状态。您看到的是MouseOver状态和所选状态。您可以通过提取默认样式对ListBoxItem进行更改,并对其进行调整或编写自己的。
然而,似乎你的意图是不同的。您可能希望的是,根据绑定集合的不同,简单地在UniformGrid中显示按钮,而不需要任何选择。您可以通过使用ItemsControl来实现这一点。它不提供任何选择功能,但允许您将集合绑定到UniformGrid作为项面板。
<ItemsControl Width="1000" Grid.Row="1" VerticalAlignment="Top" VerticalContentAlignment="Top" Margin="50" ItemsSource="{Binding SomeItemsList}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="2" Background="Transparent" Name="uniformGrid1"></UniformGrid>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Margin="50" Height="70" Click="keyword_Click" Width="250"
Foreground="Black" FontSize="16" FontFamily="Helvetica Neue" FontWeight="Bold"
BorderBrush="SlateGray" Content="{Binding Name}">
<Button.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="White" Offset="0.073" />
<GradientStop Color="White" Offset="1" />
<GradientStop Color="#FFE9E9F9" Offset="0.571" />
<GradientStop Color="#FFD7D7EC" Offset="0.243" />
</LinearGradientBrush>
</Button.Background>
</Button>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>请注意,我删除了两个Name="uniformGrid1"中的一个,因为重复的名称会导致编译错误。如果您的内容超过了视区,并且需要滚动条,则必须添加ScrollViewer,因为这是内置在ListBox中的,而不是ItemsControl中的。
<ScrollViewer HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Auto">
<ItemsControl Width="1000" Grid.Row="1" VerticalAlignment="Top" VerticalContentAlignment="Top" Margin="50" ItemsSource="{Binding SomeItemsList}">
<!-- ...other code. -->
</ItemsControl>
</ScrollViewer>发布于 2021-11-30 10:22:28
这里的问题是,ListBox有一个选择,并且选中的项目被高亮显示。您需要禁用此高亮显示以获得所需的结果,例如将ListBox.ItemContainerStyle设置为所描述的在这个答案中。这将移除(淡蓝色)选择颜色。
https://stackoverflow.com/questions/70167279
复制相似问题