2014-09-25 71 views
0

我是wpf的新手。 我有一個網格,WPF項目禁用ContextMenu 在特定條件下右鍵單擊Gridview行

<GridView x:Name="Train_View_Grid"> 
         <GridViewColumn DisplayMemberBinding="{Binding Path=Status}" Header="Status"/> 
        </GridView> 

具有上下文菜單(right_Click)出現上點擊右鍵。

我必須對狀態已完成的行禁用此右鍵單擊(其中一列是狀態值,它可以完成或運行) 但是,如果狀態正在運行,我們必須顯示右鍵單擊菜單。

private void PEGrid_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e) 
     { 

      hideContextMenu(); 
     } 

private void hideContextMenu() 
{ 
       if (Train_Details_View.SelectedItems.Count > 0) 
       { 
        DataRowView drv = Train_Details_View.SelectedItems[0] as DataRowView; 

        String journey_status = drv.Row["Status"].ToString(); 
        if (journey_status.Equals("Finished")) 
        { 
         ContextMenu.Visibility = Visibility.Hidden; 

        } 
        } 

    } 

和我把它叫做上下文菜單中的網格,

<Grid x:Name="Train_Info_Pnl" Grid.Column="2" Margin="0,0,10,0" Grid.Row="1" ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.CanContentScroll="True" PreviewMouseRightButtonDown="PEGrid_PreviewMouseRightButtonDown" > 

是我上面的代碼正確的,我應該在哪裏打電話呢? 如果我的代碼是錯誤的,我該如何糾正它..

+0

您可以通過overiding的OnPreviewMouseRightButtonDown事件(處理爲true)禁用右鍵點擊,不要忘了OnPreviewMouseRightButtonUp爲好。這是你想要的? – erikduvet 2014-09-25 10:42:03

+0

是的我怎麼能做到這一點..我是新的WPF我不知道如何調用這些事件,並創建它們 – Silver 2014-09-25 10:42:51

+0

類似於:保護覆蓋無效OnPreviewMouseRightButtonDown(MouseButtonEventArgs e){...} Google for OnPreviewMouseRightButtonDown/Up你肯定會解決的。現在不在計算機上,所以無法驗證它,但它應該可以工作... – erikduvet 2014-09-25 10:44:36

回答

1

你不能在ContextMenuService.IsEnabled上設置觸發器。這是一個純粹的XAML工作樣本:

<Grid> 
    <ListView x:Name="LV"> 
     <ListView.ContextMenu> 
      <ContextMenu> 
       <Label Content="Your menu item..."/> 
      </ContextMenu> 
     </ListView.ContextMenu> 

     <ListView.View> 
      <GridView> 
       <GridViewColumn DisplayMemberBinding="{Binding Path=IsChecked}" 
           Header="IsFinished"/> 
      </GridView> 
     </ListView.View> 

     <ListView.Style> 
      <Style> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding SelectedItem.IsChecked, 
                ElementName=LV}" Value="True"> 
         <Setter Property="ContextMenuService.IsEnabled" 
           Value="False"/> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </ListView.Style> 

     <CheckBox IsChecked="False"/> 
     <CheckBox IsChecked="True"/> 
    </ListView> 
</Grid>