2012-03-04 51 views
0

我有一個簡單的ListView綁定到計算集合。該視圖在顯示中調用Calc Name屬性。我已經將列表菜單設置爲列表視圖中的各個項目,但右鍵單擊上下文菜單顯示爲一個沒有任何內容的小框。我錯過了什麼?listview datatemplate上的上下文菜單不工作

<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

如果有的話,您定義Border.ContextMenu元素的方式有語法錯誤。正確的語法(邊界元素):

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

說了這麼多,你可以做很多優化。首先,不要爲每個項目實例化一個上下文菜單,您可以將CalcMenu移動到該部分(上一級),甚至更遠 - 到主窗口。

其次,爲什麼要爲每個項目定義一個單獨的上下文菜單?當鼠標位於項目之間的邊界時,上下文菜單是否真的很重要?只需設置上下文菜單可在整個列表:

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

並定義CALCMENU作爲主窗口的資源,或內聯的ListView元素(不是一個靜態的資源)。

+0

謝謝你。我只是爲了查看它而移動資源,但沒有意識到語法錯誤。 – 2012-03-04 13:39:25