Кнопка внутри элемента списка, игнорируя щелчки, когда выбран родительский элемент списка - PullRequest
0 голосов
/ 21 октября 2010

У меня есть список, элемент списка которого содержит, помимо прочего, кнопку, как показано ниже:

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

При нажатии кнопки в элементе списка, который не выбран, она запускает свою команду, которая вызывает контекстное меню в выделенном фрагменте кода и выбирает элемент списка родительского элемента кнопки. (Весь смысл в том, чтобы вызвать контекстное меню при щелчке левой кнопкой мыши.) Но на всю жизнь я не могу получить кнопку для запуска команды, когда ее родительский элемент списка уже выбран. Как ни странно, если кнопка внутри выбранного элемента списка щелкается правой кнопкой мыши, она должным образом вызывает свое контекстное меню, поэтому кнопка получает щелчки.

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

1 Ответ

0 голосов
/ 28 октября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...