C# WPF Displaying WebBrowser on window with AllowTransparency="true" does not display
Solution 1
I know this is an old question but I had exactly the same problem today and I solved it using
ResizeMode="NoResize"
instead of
Allowstransparency="true"
The ResizeMode does remove the annoing border too and does not impact the WebBrowser control. Seems to be the easiest way to solve your problem in this case :)
Solution 2
This is an old question but I wanted to post what I have done to get it working.
When you want to create a window with no border that is resizeable and is able to host a WebBrowser control or a Frame control pointed to a URL you simply couldn't, the contents of said control would show empty as the OP said.
I found a workaround though; in the Window, if you set the WindowStyle to None, ResizeMode to NoResize (bear with me, you will still be able to resize once done) then make sure you have UNCHECKED AllowsTransparency you will have a static sized window with no border and will show the browser control.
Now, you probably still want to be able to resize right? Well we can to that with a interop call:
[DllImport("user32.dll", CharSet = CharSet.Auto)]
private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
[DllImportAttribute("user32.dll")]
public static extern bool ReleaseCapture();
//Attach this to the MouseDown event of your drag control to move the window in place of the title bar
private void WindowDrag(object sender, MouseButtonEventArgs e) // MouseDown
{
ReleaseCapture();
SendMessage(new WindowInteropHelper(this).Handle,
0xA1, (IntPtr)0x2, (IntPtr)0);
}
//Attach this to the PreviewMousLeftButtonDown event of the grip control in the lower right corner of the form to resize the window
private void WindowResize(object sender, MouseButtonEventArgs e) //PreviewMousLeftButtonDown
{
HwndSource hwndSource = PresentationSource.FromVisual((Visual)sender) as HwndSource;
SendMessage(hwndSource.Handle, 0x112, (IntPtr)61448, IntPtr.Zero);
}
And voila, A WPF window with no border and still movable and resizable without losing compatibility with with controls like WebBrowser
user2840301
Updated on June 04, 2022Comments
-
user2840301 almost 2 years
I am displaying a window with a WebBrowser control on it. I want the windows to be frameless so I have set WindowStyle="None" This works BUT displays a colored border around the window. Allowstransparency="true" removes this BUT the WebBrowser is no longer displayed (buttons are)
I have found http://www.neowin.net/forum/topic/646970-c%23-wpf-window-with-transparency-makes-windowsformshost-disappear/ BUT I cannot get it to work (SetWindowsLong Parameter error)
Window x:Class="ZoomBrowserWPF.WebWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:UMenu" Title="Test" Height="605" Width="700" ResizeMode="CanResizeWithGrip" Loaded="Window_Loaded" Unloaded="Window_Unloaded" WindowStyle="None" Background="Transparent" Left="1" Top="1" UseLayoutRounding="True" SizeChanged="Window_SizeChanged" > <Border Name="WindowBorder" BorderBrush="Black" BorderThickness="1" CornerRadius="10" Background="Beige"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="25"/> <RowDefinition Height="30"/> <RowDefinition/> <RowDefinition Height="33"/> <RowDefinition Height="25.5"/> </Grid.RowDefinitions> <Grid x:Name="GridWebBrowser" Grid.Row="2" Grid.RowSpan="2"> <WebBrowser x:Name="webBrowser" Grid.ColumnSpan="2" Visibility="Visible" Margin="0,0,-16,0" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.IsDeferredScrollingEnabled="False" ScrollViewer.CanContentScroll="False" /> </Grid> <Button x:Name="btnZoomIn" Content="Zoom in" Grid.Row="1" Height="23" HorizontalAlignment="Left" Margin="12,0,0,0" VerticalAlignment="Top" Width="75" Click="btnZoomIn_Click" /> <Button x:Name="btnZoomOut" Content="Zoom out" Grid.Row="1" Height="23" HorizontalAlignment="Left" Margin="168,0,0,0" VerticalAlignment="Top" Width="75" Click="btnZoomOut_Click" /> <TextBlock Grid.Row="1" Height="23" HorizontalAlignment="Left" Margin="102,0,0,0" Name="txtZoom" Text="100" VerticalAlignment="Top" Width="60" /> </Grid> </Border> </Window>
-
Vincenzo Costa almost 9 yearsThe response of user3231903 is a good alternative (so that the rated) If you have and want to use transparency I recommend this post blogs.msdn.com/b/changov/archive/2009/01/19/…
-
Gh61 almost 3 yearsNo, this is not working. Tried to tweek this solution (
Placement=Mouse
is wrong, popup keeps closing, ...), but it has so many issues...