Xaml 如何在UWP中更改ListViewItem的视觉行为?
在UWP中,每次选择Xaml 如何在UWP中更改ListViewItem的视觉行为?,xaml,windows-phone,win-universal-app,Xaml,Windows Phone,Win Universal App,在UWP中,每次选择ListViewItem,都会触发情节提要,让用户感觉组件对触摸压力做出反应。该情节提要还会更改ListViewItem的背景色,直到发布 我设计了一个UserControl,它在内部使用ListView,但希望覆盖此行为,因为它并不真正适合应用程序的建议设计 下面是VisualStateGroups我试图通过其ControlTemplate应用于ListView,并通过其DataTemplate定义应用于ListViewItem,因为前一次尝试失败 <VisualSt
ListViewItem
,都会触发情节提要,让用户感觉组件对触摸压力做出反应。该情节提要还会更改ListViewItem
的背景色,直到发布
我设计了一个UserControl
,它在内部使用ListView
,但希望覆盖此行为,因为它并不真正适合应用程序的建议设计
下面是VisualStateGroups
我试图通过其ControlTemplate
应用于ListView
,并通过其DataTemplate
定义应用于ListViewItem
,因为前一次尝试失败
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal" />
<VisualState x:Name="PointerOver" />
<VisualState x:Name="Pressed" />
<VisualState x:Name="PointerOverPressed" />
<VisualState x:Name="Disabled" />
</VisualStateGroup>
<VisualStateGroup x:Name="FocusStates">
<VisualState x:Name="Focused" />
<VisualState x:Name="UnFocused" />
<VisualState x:Name="PointerFocused" />
</VisualStateGroup>
<VisualStateGroup x:Name="SelectionStates">
<VisualState x:Name="Unselecting" />
<VisualState x:Name="Unselected" />
<VisualState x:Name="UnselectedPointerOver" />
<VisualState x:Name="UnselectedSwiping" />
<VisualState x:Name="Selecting" />
<VisualState x:Name="Selected" />
<VisualState x:Name="SelectedSwiping" />
<VisualState x:Name="SelectedUnfocused" />
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
一种可能是将
DataTemplate
的根网格绑定到ItemsContainer
,这样每次选择一个项目时我都可以覆盖默认行为。但我对XAML不是那么精通,我自己也无法找到正确的方法来实现这一点 这使用了ListViewItemPresenter
,我相信您已经发现了这一点。而且,我相信你已经发现这是不可能的。这种更为封装的方法纯粹是为了提高性能。因此,ListView中的项目渲染速度明显加快。然而,这确实意味着,当你想改变它时,你有点被卡住了。这是否意味着您不能将其更改为使用自己的演示者并取消性能改进?这是否意味着您将拥有大量自定义代码?对这是否意味着这是不可能的?不,这是否意味着这是个好主意?好。我不知道怎么回答这个问题。但是,至少你知道为什么它看起来像一堵砖墙。这花了一些时间,但最终它比预期的要简单。我只需要添加一个ControlTemplate
来定位ListViewItem
,之前我没有添加,因为我一直在摆弄ListView
的ControlTemplate
由于我们不直接声明ListViewItem
,因此方法是使用ListView.ItemContainerStyle
。最终结果如下:
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListViewItem">
<ListViewItemPresenter />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListView.ItemContainerStyle>
如您所见,空的
ListViewItemPresenter
足以覆盖大多数默认行为。我无法摆脱按下的动画,但我对当前的结果很满意。这有记录吗?没有看到像这样的细节