0

内でWindowsフォームパネルをホストしようとしていますToolTip。以下は、Xamlコードとの背後にあるクラスToolTipです。

問題は、windowsFormsHostを使用している場合、パネルの色が変わらないことです。パネルToolTipがそこにあることすら知らないように感じます。

私はそれを正しくやっていますか?

(色を変更できる場合は、それを使用してカメラのライブフィードを表示します)

ボタンをクリックすると、ToolTipそこにありますが、基本的なままです。

Windowsフォームホストがなく、を使用する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;
    }
}

お手数をおかけしますが、よろしくお願いいたします。

4

1 に答える 1

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>
于 2013-03-21T03:19:37.370 に答える