Как привязать контекстное меню к кнопке элемента списка в WPF - PullRequest
0 голосов
/ 29 апреля 2018

Я пытаюсь привязать контекстное меню к списку и открыть его, когда пользователь нажимает кнопку внутри элемента списка. Если я применяю контекстное меню к самому списку, привязки работают правильно. Если я применяю контекстное меню к кнопке внутри элемента списка, я не могу привязать его к контексту данных элемента списка.

Следовательно, работает следующее, но только щелчок правой кнопкой мыши на элементе списка:

<ListBox ItemsSource="{Binding Items}">
    <ListBox.ContextMenu>
        <ContextMenu DataContext="{Binding PlacementTarget.SelectedItem, RelativeSource={RelativeSource Self}}">
            <MenuItem
                Header="{Binding Name}"
                IsCheckable="True"
                IsChecked="{Binding Active}" />
        </ContextMenu>
    </ListBox.ContextMenu>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Name}" />
                <RadioButto />
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

В следующем примере я пытаюсь привязать контекстное меню из-под переключателя, чтобы позже я мог открыть контекстное меню, щелкнув левой кнопкой мыши по кнопке, а не щелкнув правой кнопкой мыши в любом месте элемента списка:

<ListBox ItemsSource="{Binding Items}"> 
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Name}" />
                <RadioButton>
                    <RadioButton.ContextMenu>
                        <ContextMenu DataContext="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}, Path=PlacementTarget.DataContext}">
                            <MenuItem
                                Header="{Binding Name}"
                                IsCheckable="True"
                                IsChecked="{Binding Active}" />
                        </ContextMenu>
                    </RadioButton.ContextMenu>
                </RadioButton>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Я пробовал различные варианты привязки, но мне не очень повезло.

Подойдет любое решение, которое дает мне контекстное меню рядом с кнопкой, когда я нажимаю на кнопку (и только на кнопку).

...