WPF ScrollViewer与webview2内容重叠其他元素

pbossiut  于 2022-11-18  发布在  其他
关注(0)|答案(1)|浏览(385)
<Window x:Class="wpfsamples.Test"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"   
        xmlns:wv2="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf"
        mc:Ignorable="d"
        Title="Test" 
                WindowStyle="None"
        ResizeMode="NoResize"
        WindowStartupLocation="CenterScreen"
        Background="Transparent"
        AllowsTransparency="True"
        Height="Auto"
        Width="Auto"
        SizeToContent="WidthAndHeight"
        WindowState="Normal"        
        >
    <Border CornerRadius="8" Padding="0" Width="1000" Height="800" x:Name="MainBorder">
        <Border.Background>
            <SolidColorBrush Color="LightYellow"></SolidColorBrush>
        </Border.Background>

        <Grid ShowGridLines="False" Name="grid" HorizontalAlignment="Stretch">

            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>

            <Grid.RowDefinitions>
                <RowDefinition Height="38"/>
                <RowDefinition Height="*"/>
                <RowDefinition Height="52"/>
            </Grid.RowDefinitions>

            <Border Background="#242424" CornerRadius="6" Margin="47,10" Width="282" Height="22" HorizontalAlignment="Left" VerticalAlignment="Center" Padding="5">
                <TextBlock LineHeight="16" TextAlignment="Center" FontSize="13" FontStyle="Normal" FontFamily="SF Pro Text" FontWeight="DemiBold" Text="Test Header" Grid.Column="0" Grid.Row="0">
                    <TextBlock.Foreground>
                        <SolidColorBrush Color="WhiteSmoke"></SolidColorBrush>
                    </TextBlock.Foreground>
                </TextBlock>
            </Border>


            <!--display the content panel-->
            <Border Background="#242424" Grid.Row="1" Grid.Column="0" Margin="8,0" CornerRadius="10" BorderThickness="1">
                <ScrollViewer                    
                      x:Name="scrollviewer" HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto">
                    <WrapPanel Background="Black" Margin="8" x:Name="panel">
                        <Border Background="White" Width="300" Margin="20" Height="300">
                            <wv2:WebView2 Source="https://google.com"></wv2:WebView2>
                        </Border>
                        <Border Background="White" Width="300" Margin="20" Height="300">
                            <wv2:WebView2 Source="https://google.com"></wv2:WebView2>
                        </Border>
                        <Border Background="White" Width="300" Margin="20" Height="300">
                            <wv2:WebView2 Source="https://google.com"></wv2:WebView2>
                        </Border>
                        <Border Background="White" Width="300" Margin="20" Height="300">
                            <wv2:WebView2 Source="https://google.com"></wv2:WebView2>
                        </Border>
                        <Border Background="White" Width="300" Margin="20" Height="300">
                            <wv2:WebView2 Source="https://google.com"></wv2:WebView2>
                        </Border>
                        <Border Background="White" Width="300" Margin="20" Height="300">
                            <wv2:WebView2 Source="https://google.com"></wv2:WebView2>
                        </Border>
                        <Border Background="White" Width="300" Margin="20" Height="300">
                            <wv2:WebView2 Source="https://google.com"></wv2:WebView2>
                        </Border>
                    </WrapPanel>
                </ScrollViewer>
            </Border>

            <!--display the toolbar-->
            <Border Grid.Row="2" x:Name="ToolbarBorder" Background="Black" CornerRadius="0,0,8,8" Margin="0,5,0,0" Padding="0">
                <Grid HorizontalAlignment="Stretch" x:Name="toolbar" ShowGridLines="False" >
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="auto"/>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="auto"/>
                        <ColumnDefinition Width="auto"/>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="auto"/>
                    </Grid.ColumnDefinitions>
                    <Button  Name="btn_showdevicelist" Foreground="White" Content="Start" Grid.Column="2" ToolTip="MyButton"  Background="Black" Width="64"  Height="32" VerticalAlignment="Bottom"  >

                    </Button>

                </Grid>
            </Border>

        </Grid>
    </Border>
</Window>

这是窗口的整个代码,你可以复制并运行它,当我有许多元素显示在边界嵌入webview2,然后当我垂直滚动,在 Package 器面板的内容重叠底部工具栏..但如果我注解掉webview2,那么就不会有问题.如何避免这种情况?
the screencapture

ebdffaop

ebdffaop1#

你有一个经典的众所周知的空域问题。知道了10多年。很多关于它的阅读,例如在2011年M$ had a good attempt to fix it和失败和放弃。它是非正式的“不会修复”的名单,但你永远不会得到一个工程师承认它。他们现在有意地编写简单的代码,例如Webview 2,方法是创建一个winforms版本,然后使用winformshost将其 Package 到WPF中。
上面有很多文章和东西
至于你的问题,我认为你永远不会找到解决方案。没有原生的WPF元素或控件会覆盖Webview 2。例如,如果WPF有自己的HWND,比如上下文菜单、工具提示或更普遍的弹出式/窗口,那么它就会超过顶部。
如果您想使用WebView 2,则需要重新考虑您的想法
当然,一个真正的WPF implementation is CefSharp将页面“呈现”到本机WPF中,您可以完全按照自己的意愿进行操作。

相关问题