PopUp を LayeredWindow にできるかどうか疑問に思っています。
Encoder 4 を使用していますが、プログラムがレイヤード ウィンドウをキャプチャしないようにするプロパティがあります。
ツールチップにフィードを表示するコードは次のとおりです
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;
}
//popup.
return popup;
}
}
Wpf :
<Grid>
<Button Width="10" Height="10" Click="Button_Click">
<Button.ToolTip>
<w:MyToolTip Height="500" Width="550" StaysOpen="True">
<WindowsFormsHost x:Name="wrapper" Margin="0,0,0,0" Background="{x:Null}">
<wf:Panel x:Name="previewScreen" BackColor="Transparent" Size="500,500" >
<wf:Panel.Controls>
<wf:Panel x:Name="PreviewScreen2" BackColor="Transparent" Size="500,500"></wf:Panel>
</wf:Panel.Controls>
</wf:Panel>
</WindowsFormsHost>
</w:MyToolTip>
</Button.ToolTip>
</Button>
</Grid>
この問題は Encoder 4 で、プレビュー ウィンドウの HandleRef のみを受け入れます。
これは私が Encoder で行うことです: MediaSource は LiveDeviceSource です
if (mediaSource != null && mediaSource.PreviewWindow == null)
mediaSource.PreviewWindow =
new PreviewWindow(new HandleRef(PreviewWindow.PreviewScreen2, PreviewWindow.PreviewScreen2.Handle));
私が欲しいのは、ウェブカメラのプレビューを表示するが画面に記録されていないツールチップを持つことです。
ポップアップを使用しない場合、フィードは表示されません。Altought Encoder はそれが LayeredWindow であることを理解し、それを記録しません。
ポップアップを使用すると、フィードが表示されますが、記録されています。どういうわけか、ツールチップに表示されていても、layeredWindow ではなくなりました。
いくつかの助けは大いに感謝され、報われるでしょう =)