在使用自定义ListView
的{{1}}中,即使ItemContainerStyle
设置为ItemClick
,也不会触发IsItemClickEnabled
。我的XAML代码位于True
内部自定义控件模板中,并且是
ResoureDictionary
和<ListView ItemsSource="{TemplateBinding History}"
ItemTemplate="{StaticResource HistoryItemTemplate}"
ItemContainerStyle="{StaticResource HistoryItemContainerStyle}"
IsHitTestVisible="True" SelectionMode="None" IsSwipeEnabled="False"
CanDragItems="False" CanReorderItems="False"
IsItemClickEnabled="True" Width="400" Margin="50,0,0,0" >
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel Margin="0" />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
</ListView>
是
HistoryItemTemplate
和C#代码是
<Style x:Key="HistoryItemContainerStyle" TargetType="ListViewItem">
<Setter Property="BorderThickness" Value="0,0,0,1" />
<Setter Property="Margin" Value="0" />
<Setter Property="Padding" Value="0" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListViewItem">
<Button Style="{StaticResource HistoryItemButtonStyle}"
Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我还尝试将protected override void OnApplyTemplate()
{
base.OnApplyTemplate();
var historyListView = GetTemplateChild("HistoryListView") as ListView;
if (historyListView != null)
historyListView.ItemClick += OnHistoryItemClicked;
}
模板ListViewItem
属性中的按钮设置为IsHitTestVisible
。这不起作用。如果删除了自定义ItemContainersStyle,那么每件事都可以正常工作。
答案 0 :(得分:1)
这是因为模板中的Button
元素阻止ListViewItem
处理指针事件。您需要将Button
替换为其他元素,例如Border
。