Контекстное меню в списке данных не работает - PullRequest
0 голосов
/ 04 марта 2012

У меня есть простой ListView, привязанный к коллекции вычислений.Представление вызывает свойство calc Name на дисплее.Я установил контекстное меню для отдельных элементов в списке, но при щелчке правой кнопкой мыши контекстное меню отображается в виде крошечной коробки, в которой ничего нет. Чего мне не хватает?

    <ListView x:Name="CalcList" ItemsSource="{Binding Calculations}">
        <ListView.ItemTemplate>
            <DataTemplate DataType="x:Type lib:Calculation">
                <DataTemplate.Resources>
                    <ContextMenu x:Key="CalcMenu">
                        <MenuItem Header="Delete Calculation" Click="MenuItem_Click"/>
                        <MenuItem Header="Another"/>
                        <MenuItem Header="Another"/>
                    </ContextMenu>
                </DataTemplate.Resources>
                <Border BorderBrush="Black" BorderThickness="1" Margin="2">
                    <Border.ContextMenu>
                        <ContextMenu ContextMenu="{StaticResource CalcMenu}"/>
                    </Border.ContextMenu>
                    <TextBlock MouseLeftButtonDown="DisplayCalc" Text="{Binding Path=Name}"></TextBlock>                       
                </Border>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

Спасибо.

1 Ответ

1 голос
/ 04 марта 2012

Во всяком случае, у вас есть синтаксическая ошибка при определении элемента Border.ContextMenu. Правильный синтаксис (пограничного элемента):

<Border BorderBrush="Black" BorderThickness="1"
        Margin="2"
        ContextMenu="{StaticResource CalcMenu}">
     <TextBlock ... />
</Border>

Сказав это, вы можете сделать много оптимизаций. Во-первых, вместо создания контекстного меню для каждого элемента, вы можете переместить CalcMenu в раздел (на один уровень выше) или даже дальше - в главное окно.

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

<ListView x:Name="CalcList" ContextMenu="{StaticResource CalcMenu}">
    ...

и определите CalcMenu как ресурсы главного окна или вставьте элемент ListView (не статический ресурс).

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