Windows phone 7 WP7 Itemtemplate在折叠的ExpanderView上单击事件激发
我正在使用Silverlight工具箱中提供的ExpanderView控件和一些自定义模板。这一切都很好,但当ExpanderView被折叠时,我会在ExpanderView展开时单击标题下方的项目所在区域。触发该项目的click事件 我怎样才能解决这个问题?我应该在ExpanderView折叠时删除tap命令还是删除ItemPanel,并在展开时再次添加它Windows phone 7 WP7 Itemtemplate在折叠的ExpanderView上单击事件激发,windows-phone-7,silverlight-toolkit,Windows Phone 7,Silverlight Toolkit,我正在使用Silverlight工具箱中提供的ExpanderView控件和一些自定义模板。这一切都很好,但当ExpanderView被折叠时,我会在ExpanderView展开时单击标题下方的项目所在区域。触发该项目的click事件 我怎样才能解决这个问题?我应该在ExpanderView折叠时删除tap命令还是删除ItemPanel,并在展开时再次添加它 <DataTemplate x:Key="CustomItemTemplate"> <Image del
<DataTemplate x:Key="CustomItemTemplate">
<Image delay:LowProfileImageLoader.UriSource="{Binding}" Width="156" Height="95" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="Tap">
<cmd:EventToCommand Command="{Binding Storage.ImageTapCommand, Source={StaticResource Locator}}" CommandParameter="{Binding}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Image>
</DataTemplate>
<toolkit:ExpanderView Grid.Column="1" Header="{Binding}"
Expander="{Binding}" IsExpanded="{Binding IsExpanded, Mode=TwoWay}"
ItemsSource="{Binding Files}" HeaderTemplate="{StaticResource CustomHeaderTemplate}"
ExpanderTemplate="{StaticResource CustomExpanderTemplate}"
ItemTemplate="{StaticResource CustomItemTemplate}" >
<toolkit:ExpanderView.ItemsPanel>
<ItemsPanelTemplate>
<toolkit:WrapPanel />
</ItemsPanelTemplate>
</toolkit:ExpanderView.ItemsPanel>
</toolkit:ExpanderView>
每次展开/折叠ExpanderView时,以及初始绑定ExpanderView之后(连接到ExpanderView.LayoutUpdated可以正常工作),您都可以更改每个扩展项的根UIElement的IshittetVisible属性。下面是一个为我解决问题的示例:
private void FixExpanderItemsInteractivity(ExpanderView expanderView)
{
foreach (var item in expanderView.Items)
{
ContentPresenter contentPresenter = expanderView.ItemContainerGenerator.ContainerFromItem(item) as ContentPresenter;
if (contentPresenter != null)
{
UIElement expanderItemRootElement = VisualTreeHelper.GetChild(contentPresenter, 0) as UIElement;
if(expanderItemRootElement != null)
{
expanderItemRootElement.IsHitTestVisible = expanderView.IsExpanded;
}
}
}
}
private void Expander_Expanded(object sender, RoutedEventArgs e)
{
FixExpanderItemsInteractivity(sender as ExpanderView);
}
private void Expander_Collapsed(object sender, RoutedEventArgs e)
{
FixExpanderItemsInteractivity(sender as ExpanderView);
}
private void Expander_LayoutUpdated(object sender, EventArgs e)
{
FixExpanderItemsInteractivity(sender as ExpanderView);
}
在阅读了faq之后,我对答案的措辞做了一些细微的修改。除此之外,我真的不明白为什么我7月18日的原始答案被删除了。这是一个经过测试的解决方案,解决了OP所面临的问题。如果你再次删除,请具体说明我的答案有什么问题,否则我不会再费心回答了。