c# - Toolbar Overlay over WindowsFormsHost -
i have swf object embedded in windowsformshost control inside wpf window.
i'd add toolbar on swf movie.
the problem snippet of code have below, when new child added host control (or movie loaded, haven't figured out yet), toolbar invisible. seems z-index of swf reason set top.
here looks like:
xaml:
<grid name="player"> <windowsformshost name="host" panel.zindex="0" /> <grid name="toolbar" panel.zindex="1" height="50" verticalalignment="bottom"> [play, pause, seek columns go here] </grid> </grid>
c#:
private void window_loaded(object sender, routedeventargs e) { flash = new axshockwaveflashobjects.axshockwaveflash(); host.child = flash; flash.loadmovie(0, [movie]); // movie plays, no toolbar :( }
any insight on issue appreciated.
update: since no suitable answer posted, i've placed own solution below. realize more of hack solution i'm open other suggestions.
here hackaround windowsformshost z-index issue.
the idea place whatever need overlayed nested inside popup. update popup's position per this answer whenever window resized/moved.
note: you'll want handle events when window becomes activated/deactivated, pop disappears when window goes out of focus (or behind window).
xaml:
<window [stuff] locationchanged="window_locationchanged" sizechanged="window_sizechanged" > <grid name="player"> [same code before] <popup name="toolbar_popup" isopen="true" placementtarget="{binding elementname=host}"> [toolbar grid goes here] </popup> </grid> </window>
c#:
private void resetpopup() { // update position // https://stackoverflow.com/a/2466030/865883 var offset = toolbar_popup.horizontaloffset; toolbar_popup.horizontaloffset = offset + 1; toolbar_popup.horizontaloffset = offset; // resizing toolbar_popup.width = player.actualwidth; toolbar_popup.placementrectangle = new rect(0, host.actualheight, 0, 0); toolbar_popup.placement = system.windows.controls.primitives.placementmode.top; } private void window_locationchanged(object sender, eventargs e) { resetpopup(); } private void window_sizechanged(object sender, sizechangedeventargs e) { resetpopup(); }
Comments
Post a Comment