Динамически есть ContextMenu для каждого ListViewItem в ListView? - PullRequest
3 голосов
/ 13 января 2011

В настоящее время у меня есть ContextMenu в ListView с его стилем представления, установленным на "GridView". Однако это доставляет мне неприятности, поскольку вы можете щелкнуть правой кнопкой мыши визуальные столбцы в верхней части ListView, чтобы также появилось контекстное меню.

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

Есть ли умный способ сделать это? Может быть, через какой-то шаблон? Какой подход будет лучшим?

Ответы [ 2 ]

8 голосов
/ 13 января 2011

Вы можете создать стиль, который будет применяться к элементам в списке, а не к самому списку. Что-то вроде:

<ListView>
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Setter Property="ContextMenu">
                <Setter.Value>
                    <ContextMenu>
                        <MenuItem Header="Send Email" />
                        <MenuItem Header="Delete" />
                    </ContextMenu>
                </Setter.Value>
            </Setter>
        </Style>
    </ListView.ItemContainerStyle>
</ListView>
3 голосов
/ 29 февраля 2012

Для справки, я не мог заставить его работать так, как это продолжало приводить к ошибке:

A first chance exception of type 'System.Windows.Markup.XamlParseException' occurred in PresentationFramework.dll

Additional information: Cannot add content of type 'System.Windows.Controls.ContextMenu' to an object of type 'System.Object'.  Error at object 'System.Windows.Controls.ContextMenu' in markup file '<file>'.

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

<ListView.ItemContainerStyle>
    <Style TargetType="ListViewItem">
        <Setter Property="ContextMenu" Value="{StaticResource ListViewContextMenu}" />
    </Style>
</ListView.ItemContainerStyle>

<Application.Resources>
    <ContextMenu x:Key="ListViewContextMenu">
        <MenuItem Header="Play" />
    </ContextMenu>
</Application.Resources>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...