2012-05-29 68 views
0

我正在使用Silverlight Toolkit中提供的ExpanderView控件和一些自定義模板。它一切正常,但是當ExpanderView被摺疊時,當ExpanderView被展開時,我點擊項目所在的Header下面的區域。該項目的點擊事件觸發。WP7 Item模板點擊事件在崩潰時觸發ExpanderView

我該如何解決這個問題?我應該以某種方式移除tap操作命令,或者在ExpanderView展開時移除ItemPanel,並且在展開後再次添加它?

<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> 

回答

2

你可以在每次ExpanderView展開時間更改根UIElement的IsHitTestVisible屬性爲每個擴展項/塌了,也只是在最初綁定ExpanderView(掛接到ExpanderView.LayoutUpdated工作正常那個目的)。下面是一個例子,爲我解決了這個問題:

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); 
    } 
+1

我在閱讀常見問題後對答案的措辭做了些許修改。除此之外,我真的不知道爲什麼我的原始答案從7月18日被刪除。對於OP所遇到的問題,這是一個經過測試的解決方案。如果你再次刪除,請具體說明我的答案有什麼問題,否則我不會再打擾回答。 –