2010-10-21 24 views
0

J'ai un listbox dont ListBoxItem contient, entre autres, un bouton, comme suit:Bouton dans un ListBoxItem en ignorant les clics lorsque son ListBoxItem parent est sélectionné

<DataTemplate x:Key="cDataTemplate" DataType="x:Type utils:cd"> 
    <StackPanel Orientation="Horizontal" Background="Transparent"> 
     <Button Style="{StaticResource LIButton}" x:Name="CButton" 
       Command="{x:Static this:EditorCommands.RaiseCMenu}" 
       CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}}"> 
      <Image Name="Image" Source="icon_c.jpg" Width="33" Height="21"/> 
      <Button.ContextMenu> 
       <ContextMenu x:Name="ctxtCard"> 
        <MenuItem Header="..." Command="{x:Static this:EditorCommands.abc}"/> 
        <MenuItem Header="..." Command="{x:Static this:EditorCommands.def}"/> 
       </ContextMenu> 
      </Button.ContextMenu> 
     </Button> 
     <StackPanel Background="Transparent"> 
      <TextBlock HorizontalAlignment="Left"> 
... 
      </TextBlock> 
      <TextBlock HorizontalAlignment="Left"> 
... 
      </TextBlock> 
     </StackPanel> 
    </StackPanel> 
</DataTemplate> 

<Style x:Key="cListBoxItemStyle" TargetType="ListBoxItem"> 
    <Setter Property="ContentTemplate" Value="{DynamicResource cDataTemplate}"/> 
    <Setter Property="Background" Value="transparent"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="ListBoxItem"> 
       <Border 
         Name="Border" 
... 
         Background="Transparent"> 
        <ContentPresenter Name="Content" HorizontalAlignment="Left" VerticalAlignment="Center" Opacity="0.55"/> 
       </Border> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsSelected" Value="true"> 
         <Setter TargetName="Border" Property="BorderBrush" Value="Black"/> 
        </Trigger> 
        <Trigger Property="IsSelected" Value="true"> 
         <Setter TargetName="Border" Property="BorderThickness" Value="1,1,1,1"/> 
        </Trigger> 
        <Trigger Property="IsSelected" Value="true"> 
         <Setter TargetName="Content" Property="Opacity" Value="1.0"/> 
        </Trigger> 
        <Trigger Property="IsMouseOver" Value="true"> 
         <Setter TargetName="Content" Property="Opacity" Value="1.0"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Lorsque le bouton dans un ListBoxItem non sélectionné est cliqué, il déclenche sa commande, ce qui soulève le menu contextuel dans code-behind et sélectionne le parent listboxitem du bouton. (Le but est d'élever le menu contextuel en cliquant dessus.) Mais pour la vie de moi, je ne peux pas obtenir le bouton pour déclencher la commande quand son parent listboxitem est déjà sélectionné. Bizarrement, si l'on clique avec le bouton droit sur le bouton à l'intérieur d'un listbox sélectionné, le menu contextuel de celui-ci est surligné, ainsi le bouton reçoit des clics.

Merci d'avance!

Répondre

0

Apparemment, cela se produit lorsque le mode de sélection d'une liste est défini sur étendu. Je mettrai à jour cette question si jamais je trouve un moyen de contourner cela.