2013-03-20 4 views
0

ToolTip 안에 windows 양식 패널을 호스팅하려고합니다. 다음은 ToolTip에 대한 Xaml 코드와 클래스입니다.wpf 툴팁 내에서 WindowsFormHost 사용

문제는 패널이 색상을 변경하지 않는 windowsFormsHost를 사용하는 경우입니다. 즉, ToolTip은 거기에 있다는 것을 알지 못합니다.

내가 제대로하고 있습니까?

나는 버튼을 클릭하면,

ToolTip이 있지만, 기본 유지 (나는 색상을 변경할 수 있어요 경우 나 카메라의 liveFeed를 표시하는 데 사용됩니다).

Windows Form Host가없고 StackPanel을 사용하면 작동합니다. 하지만 Panel을 사용해야합니다.

XAML :

<Grid> 
<Button Width="100" Height="100"> 
     <Button.ToolTip> 
      <Controls:MyToolTip Height="500" Width="550"> 
        <WindowsFormsHost x:Name="wrapper" Margin="0,0,0,0" Background="{x:Null}"> 
         <wf:Panel x:Name="previewScreen" BackColor="Purple" Size="200,200" > 
         </wf:Panel> 
        </WindowsFormsHost> 
      </Controls:MyToolTip> 
     </Button.ToolTip> 
    </Button> 
    </Grid> 

C 번호 : 시간과 도움을

public class MyToolTip : ToolTip 
{ 
    protected override void OnTemplateChanged(ControlTemplate oldTemplate, ControlTemplate newTemplate) 
    { 
     if (newTemplate != null) 
     { 
      this.Visibility = Visibility.Collapsed; 
      this.IsOpen = true; 
      Popup popup = GetPopupFromVisualChild(this); 
      if (popup != null) popup.AllowsTransparency = false; 
      this.IsOpen = false; 
      this.Visibility = Visibility.Visible; 
     } 
    } 

    private static Popup GetPopupFromVisualChild(Visual child) 
    { 
     Visual parent = child; 
     FrameworkElement visualRoot = null; 
     while (parent != null) 
     { 
      visualRoot = parent as FrameworkElement; 
      parent = VisualTreeHelper.GetParent(parent) as Visual; 
     } 

     Popup popup = null; 
     if (visualRoot != null) 
     { 
      popup = visualRoot.Parent as Popup; 
     } 

     return popup; 
    } 
} 

감사합니다.

답변

1

패널에 내용이 없으므로 배경이 표시되지 않는 것이 문제입니다. 카메라 제어 나에게 도움이 직접적인 문제가 있지만 덕분에 없었다,

<Grid> 
    <Button Width="100" Height="100"> 
     <Button.ToolTip> 
      <Controls:MyToolTip > 
       <WindowsFormsHost x:Name="wrapper" Margin="0,0,0,0" Background="{x:Null}" > 
        <wf:Panel x:Name="previewScreen" BackColor="Purple" Size="200,200" > 
         <wf:Panel.Controls> 
          <wf:Label Text="Test"></wf:Label> 
         </wf:Panel.Controls>        
        </wf:Panel> 
       </WindowsFormsHost> 
      </Controls:MyToolTip> 
     </Button.ToolTip> 
    </Button> 
</Grid> 
+0

안녕 Dzyann :

이보십시오. – Jonathan

+0

@Jonathan이 도와 줘서 기쁩니다! – Dzyann