2011-12-08 2 views
2

툴팁이있는 컨트롤이 있습니다. 내가 원하는 것은 컨트롤 위로 마우스를 가져 가면 도구 설명이 열립니다 : 마우스로 도구 설명을 입력하면 mouseEnter 이벤트가 트리거되어 다른 동작이 트리거됩니다. 가장 가까운 내가이 솔루션을 찾는 오전 트리거와 함께 컨트롤에 ToolTipClosing 이벤트를 추가하는 것입니다 ...하지만 내 마우스가 툴팁을 입력하지 않는 경우에도 내가 컨트롤을 떠나는대로 시작됩니다. 이ToolTip이 MouseEnter 이벤트를 트리거하는 방법은 무엇입니까?

여기 예입니다 (툴팁 자체에 MouseEnter 이벤트를 트리거링 전혀 해고하지 않는 것) :

XAML을 (내가 툴팁을 입력하면 테두리의 배경을 변경하려는 경우)

<Border Height="300" Name="dummyBorder" 
         Width="200" 
         Background="Red" /> 
    <Label ToolTipService.InitialShowDelay="3000" 
          Content="Hover over here" 
          ToolTipService.ShowDuration="4000" 
          ToolTipService.Placement="Right" 
          ToolTipClosing="Label_ToolTipClosing" 
          Width="100" 
          HorizontalAlignment="Center" 
          Margin="10"> 
     <Label.ToolTip> 
      <ToolTip Name="tt" MouseEnter="ttBorder_MouseEnter"> 
       <Border Background="Brown" 
         Name="ttBorder" 
         MouseEnter="ttBorder_MouseEnter" 
         Width="100" 
         Height="50"> 
        <TextBlock Text="This is a tool tip." /> 
       </Border> 
      </ToolTip> 
     </Label.ToolTip> 
    </Label> 

코드 숨김 : (이 작품의도) 내가 특별히 툴팁이 아닌 팝업을 사용하려면

private void Label_ToolTipClosing(object sender, ToolTipEventArgs e) 
{ 
    if (tt.IsMouseDirectlyOver) 
    { 
     dummyBorder.Background = Brushes.Aqua; 
    } 
} 

private void ttBorder_MouseEnter(object sender, MouseEventArgs e) 
{ 
    dummyBorder.Background = Brushes.Aqua; 
} 

. 이것이 가능한가? 도움이 될 것입니다.

답변

0

음 (9 개월 후와 아무 대답도) 나는 그때 아무 방법도다는 것을 나는 짐작한다. (다르게 증명되지 않는 한)

+1

IsHitTestable은 툴팁을 호스팅하는 상위 Popup에 대해 항상 "false"로 설정되어 있기 때문에 MouseEnter가 작동하지 않습니다. http://referencesource.microsoft.com/#PresentationFramework/src/Framework/System/Windows/Controls/ToolTip.cs# 05775d1d4906ee8d 그런데 툴팁은 StaysOpen = true를 지원하지 않으므로이 속성의 값을 변경할 방법이 없습니다. 이걸 너무 좋아했 을까? ( – floele

0

이 같은 것을 시도 할 것이다 : 당신의 코드 숨김에서 다음

<MouseBinding Gesture="LeftClick" Command="{Binding ChangeColour}"/> 

: 당신의 툴팁 태그 내부

<Window.CommandBindings> 
<CommandBinding Command="ChangeColour" 
    CanExecute="ChangeCanExecute" 
    Executed="ChangeExecuted" /> 
</Window.CommandBindings> 

private void ChangeCanExecute(object sender, CanExecuteRoutedEventArgs e) 
{ 
    e.CanExecute = true; 
    e.Handled = true; 
} 

private void ChangeExecuted(object sender, ExecutedRoutedEventArgs e) 
{ 
    dummyBorder.Background = Brushes.Aqua; 
    e.Handled = true; 
} 
+0

나는 이것을 시도했지만 작동하지 않는 것 같다. – Danield

+0

나는 mvvm 모델로 모든 wpf를 수행하므로 코드에서 명령을 연결하는 데 100 % 확실하지 않습니다. 이 방법으로 오류가 발생 했습니까? – Emy

+0

오류는 없지만 명령이 호출되지 않습니다. – Danield

관련 문제