2017-02-14 5 views
0

을 닫을 때 더블 클릭을 인식하는 방법 : 상황에 맞는 메뉴가 열려있는 경우 이 문제를 강조하는 예입니다 어떻게 WPF 컨텍스트 메뉴

<TextBlock Text="double click me" Width="150" Height="25" 
      ContextMenuOpening="TextBlock_ContextMenuOpening" 
      Mouse.MouseDown="TextBlock_MouseDown"> 
    <TextBlock.ContextMenu> 
     <ContextMenu> 
      <MenuItem Header="test" /> 
     </ContextMenu> 
    </TextBlock.ContextMenu> 
</TextBlock> 

, 내가 TextBlock에 더블 클릭. TextBlock_MouseDown의 첫 번째 히트는 예상대로 e.ClickCount = 1이지만 두 번째 히트는 예상대로입니다. 클릭을 동일한 체인에 포함시킬 수있는 방법이 있습니까?

답변

0

첫 번째 클릭은 ContextMenu가 폐쇄 될 때 ContextMenu 그래서 당신이 ContextMenuClosing을 처리 한 후 사이에 경과 된 총 시간을 비교할 수 있어야한다 닫히고 TextBlock는, 예를 들어 다시 클릭 할 때 :

DateTime dt; 
private void TextBlock_MouseDown(object sender, MouseButtonEventArgs e) 
{ 
    if (DateTime.Now.Subtract(dt).TotalSeconds <= 0.3) 
    { 
     MessageBox.Show("double click detected!"); 
     dt = DateTime.MinValue; 
    } 
} 

private void TextBlock_ContextMenuClosing(object sender, ContextMenuEventArgs e) 
{ 
    dt = DateTime.Now; 
} 

<TextBlock Text="double click me" Width="150" Height="25" 
      ContextMenuClosing="TextBlock_ContextMenuClosing" 
      Mouse.MouseDown="TextBlock_MouseDown"> 
    <TextBlock.ContextMenu> 
     <ContextMenu> 
      <MenuItem Header="test" /> 
     </ContextMenu> 
    </TextBlock.ContextMenu> 
</TextBlock> 
0

어떨까요? StaysOpenOnClick = "True".

private void MenuItem_PreviewMouseDoubleClick(object sender, MouseButtonEventArgs e) 
    { 
     // ... 
     cm.IsOpen = false; 
    } 

는 또한의 ContextMenu에서 StaysOpen 속성이 너무 떨어져 있음을 유의하십시오, 당신은 그것을 사용할 수 있습니다

<TextBlock Text="double click me" Width="150" Height="25" > 
     <TextBlock.ContextMenu> 
      <ContextMenu Name="cm"> 
       <MenuItem PreviewMouseDoubleClick="MenuItem_PreviewMouseDoubleClick" Header="test" 
         StaysOpenOnClick="True" /> 
      </ContextMenu> 
     </TextBlock.ContextMenu> 
    </TextBlock> 

코드 : 당신은 더블 클릭 후 닫을 수 있습니다.

+0

@Brandon이 답변으로 문제가 해결 되었습니까? – Ron