2014-09-18 2 views
1

WPF 응용 프로그램에서 작업하면서 상황에 맞는 도움말 시스템을 만들고 싶습니다. 도움말 내용이 현재 창 이름, 컨트롤 및 해당 컨트롤과 관련된 도움말을 포함하는 XML 파일에 있어야합니다. 그러면이 도움말 화면은 투명한 모양으로 열리고 xml 파일에서 읽은 다음 덮어 쓰는 화면의 컨트롤 근처에있는이 투명한 창에 도움말 아이콘을 놓은 다음 도움말 아이콘을 클릭하면 도움말이 표시됩니다 툴팁이나 기본 컨트롤과 비슷한 것으로wpf 하위 창의 컨트롤에 종속적 인 핫스팟이있는 투명 창/레이어

투명한 창을 만들고이 창을 가지고 있으면 창에있는 특정 컨트롤의 위치를 ​​찾아 볼 수있는 제안이 있습니까?

모든 입력에 대한 감사 또는 아이디어

+1

WPF의 Adorner 지원에 대해 살펴 보셨습니까? 별도의 창보다는 AdornerLayer에 아이콘을 배치하는 것이 더 나을 수도 있습니다. 위치를 지정하는 것이 더 쉬울 것입니다. –

답변

1

은 당연히, 당신은 Transparent 자사의 Background 속성을 설정하여 투명 컨트롤을 할 수 있습니다. 모든 컨트롤을 사용하여 도움말 정보를 표시 할 수 있으며 XAML 아래쪽에 선언되어있는 한 다른 컨트롤 위에 나타납니다. Panel.ZIndex 속성을 명시 적으로 설정하여 'Z'순서를 늘리는 것이 좋습니다.

이 컨트롤을 배치하는 방법은 위치가 마우스 포인터의 위치와 관련이 있다고 가정합니다. 이 경우, 당신이 뭔가를 할 수 있습니다 :

HitTestResult hitTestResult = 
    VisualTreeHelper.HitTest(adornedUIElement, e.GetPosition(adornedUIElement)); 
Control controlUnderMouse = hitTestResult.VisualHit.GetParentOfType<Control>(); 

이 ...

public static T GetParentOfType<T>(this DependencyObject element) where T : DependencyObject 
{ 
    Type type = typeof(T); 
    if (element == null) return null; 
    DependencyObject parent = VisualTreeHelper.GetParent(element); 
    if (parent == null && ((FrameworkElement)element).Parent is DependencyObject) parent = ((FrameworkElement)element).Parent; 
    if (parent == null) return null; 
    else if (parent.GetType() == type || parent.GetType().IsSubclassOf(type)) return parent as T; 
    return GetParentOfType<T>(parent); 
} 

GetParentOfType 방법은 Extension method이며 static 클래스에 추가해야합니다.

관련 문제