У меня есть список, listboxitem которого содержит, среди прочего, кнопку, как показано ниже:
<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>
Когда нажимается кнопка в невыбранном элементе списка, она запускает свою команду, которая вызывает контекстное меню в программном коде и выбирает родительский элемент списка кнопки. (Весь смысл в том, чтобы вызвать контекстное меню при щелчке левой кнопкой мыши.) Но, клянусь жизнью, я не могу заставить кнопку запускать команду, когда ее родительский элемент listboxitem уже выбран. Как ни странно, если кнопка внутри выбранного элемента списка щелкнута правой кнопкой мыши, она должным образом вызовет свое контекстное меню, поэтому кнопка получает клики.
Заранее спасибо!