UWP-CPP/Winrt hovered/selected 时设置 ListViewItem 的圆角半径
UWP-CPP/Winrt Set Corner radius of the ListViewItem when hovered/selected
我打算使用 ListView 显示对象列表。根据设计,ListViewItem 周围的矩形应该在角处变圆。已尝试多种方法实现相同但找不到解决方案。
<ListView
x:Name="ObjectList"
ItemsSource="{x:Bind ObjectViewModel.Objects}"
SelectionChanged="ListViewButtonClick"
MaxWidth ="{StaticResource ColumnMaximumWidth}"
VerticalAlignment = "Center"
HorizontalContentAlignment = "Stretch"
ScrollViewer.HorizontalScrollBarVisibility ="Disabled"
SelectionMode ="Single" />
<ListView.Resources>
<SolidColorBrush x:Key="ListViewItemBackgroundSelected" Color="Green" />
<SolidColorBrush x:Key="ListViewItemBackgroundSelectedPointerOver" Color="Green" />
</ListView.Resources>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Margin" Value="0,0,0,30" />
</Style>
</ListView.ItemContainerStyle>
<ItemsControl.ItemTemplate>
<DataTemplate x:DataType="local:ObjectModel">
<Border
BorderBrush="Red"
BorderThickness="3"
CornerRadius="5">
<Grid MinHeight="66" CornerRadius="8">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<FontIcon
FontSize="17"
Glyph=""
Style="{StaticResource FontIconStyle1}" />
<TextBlock
Grid.Column="1"
Style="{StaticResource AddBluetoothLabelTextStyle}"
Text="{x:Bind ObjectName, Mode=OneWay}" />
</Grid>
</Border>
</ItemsControl.ItemTemplate>
</ListView>
如图所示,selected/hovered 项的边角未圆化。您能否帮助实现这一目标。 TIA
您需要更改 VisualState
以将 ListViewItem
的 CornerRadius
设置为 ListViewItem
的样式。
请检查以下步骤:
- 打开
generic.xaml
文件,找到一个Style
,其TargetType
为ListViewItem
,Key
为ListViewItemRevealStyle
。将样式复制到您的 Page.Resources
.
- 删除
x:Key
属性样式,使该样式在当前页面所有ListViewItem
都可以使用
- 找到一个名为
Selected
的VisualState
,添加如下代码:
<VisualState x:Name="Selected">
<VisualState.Setters>
<Setter Target="Root.CornerRadius" Value="10" />
</VisualState.Setters>
</VisualState>
- 找到名字为
PointerOver
、PointerOverSelected
、PointerOverPressed
、PointerOverPressed
的VisualState
,分别添加如下代码:
<Setter Target="Root.CornerRadius" Value="10" /> <!--Add this code-->
- 删除与
ListViewItem’s
样式冲突的ListView.ItemContainerStyle
语句。
注意,最好先按照上面的步骤在ListViewItem
样式中设置圆角半径,然后再添加其他样式或设置,这样可以保证[=14]样式中的设置=] 工作。
我打算使用 ListView 显示对象列表。根据设计,ListViewItem 周围的矩形应该在角处变圆。已尝试多种方法实现相同但找不到解决方案。
<ListView
x:Name="ObjectList"
ItemsSource="{x:Bind ObjectViewModel.Objects}"
SelectionChanged="ListViewButtonClick"
MaxWidth ="{StaticResource ColumnMaximumWidth}"
VerticalAlignment = "Center"
HorizontalContentAlignment = "Stretch"
ScrollViewer.HorizontalScrollBarVisibility ="Disabled"
SelectionMode ="Single" />
<ListView.Resources>
<SolidColorBrush x:Key="ListViewItemBackgroundSelected" Color="Green" />
<SolidColorBrush x:Key="ListViewItemBackgroundSelectedPointerOver" Color="Green" />
</ListView.Resources>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Margin" Value="0,0,0,30" />
</Style>
</ListView.ItemContainerStyle>
<ItemsControl.ItemTemplate>
<DataTemplate x:DataType="local:ObjectModel">
<Border
BorderBrush="Red"
BorderThickness="3"
CornerRadius="5">
<Grid MinHeight="66" CornerRadius="8">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<FontIcon
FontSize="17"
Glyph=""
Style="{StaticResource FontIconStyle1}" />
<TextBlock
Grid.Column="1"
Style="{StaticResource AddBluetoothLabelTextStyle}"
Text="{x:Bind ObjectName, Mode=OneWay}" />
</Grid>
</Border>
</ItemsControl.ItemTemplate>
</ListView>
如图所示,selected/hovered 项的边角未圆化。您能否帮助实现这一目标。 TIA
您需要更改 VisualState
以将 ListViewItem
的 CornerRadius
设置为 ListViewItem
的样式。
请检查以下步骤:
- 打开
generic.xaml
文件,找到一个Style
,其TargetType
为ListViewItem
,Key
为ListViewItemRevealStyle
。将样式复制到您的Page.Resources
. - 删除
x:Key
属性样式,使该样式在当前页面所有ListViewItem
都可以使用 - 找到一个名为
Selected
的VisualState
,添加如下代码:
<VisualState x:Name="Selected">
<VisualState.Setters>
<Setter Target="Root.CornerRadius" Value="10" />
</VisualState.Setters>
</VisualState>
- 找到名字为
PointerOver
、PointerOverSelected
、PointerOverPressed
、PointerOverPressed
的VisualState
,分别添加如下代码:
<Setter Target="Root.CornerRadius" Value="10" /> <!--Add this code-->
- 删除与
ListViewItem’s
样式冲突的ListView.ItemContainerStyle
语句。
注意,最好先按照上面的步骤在ListViewItem
样式中设置圆角半径,然后再添加其他样式或设置,这样可以保证[=14]样式中的设置=] 工作。