Кнопка внутри элемента списка, игнорирующая клики, когда выбран его родительский элемент списка

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

Заранее спасибо!


person tempy    schedule 21.10.2010    source источник


Ответы (1)


По-видимому, это происходит, когда режим выбора в списке установлен на расширенный. Я обновлю этот вопрос, если когда-нибудь найду способ обойти его.

person tempy    schedule 28.10.2010