【问题标题】:How to create button over WebView2 control?如何在 WebView2 控件上创建按钮?
【发布时间】:2021-08-05 23:36:12
【问题描述】:

我的 WPF 应用程序中有 WebView2 控件。 我想在光标位置以编程方式创建一个按钮。

Button ks = new Button();
ks.Width = 25;
ks.Height = 15;
ks.Content = "Add";
ks.Background = Brushes.Red;
ks.Margin = new Thickness(k.X, k.Y, 0, 0);

grid.Children.Add(ks);

但是我的按钮好像是在WebView2控件下创建的,看不到。

如何在我的 WebView2 控件上创建一个按钮?

【问题讨论】:

  • 你不能。 WebView2 不是纯 wpf 组件。它里面有 COM 组件。因此,它不能像通常的 wpf 组件那样工作
  • 你试过'SetZIndex'吗?

标签: c# wpf xaml webview webview2


【解决方案1】:

这有点棘手,但可能。我将在 XAML 中执行此操作,但您可以根据需要重写它(创建按钮或仅切换可见性)。
主要思想是用PopUp 包装Button。弹窗不属于视觉,单独处理。
为了感觉它是一个简单的按钮,您需要处理一些边缘情况,例如最小化、最大化、移动、停用窗口。
因此,对于窗口,请为 ActivatedDeactivatedStateChangedLocationChanged 事件附加事件处理程序(您还可以为所有代码隐藏创建一个行为以在 XAML 中处理它)。

private void Window_Activated(object sender, EventArgs e)
{
    //Dispatcher we need for window change the size first
    Dispatcher.BeginInvoke((Action)(() => {
        popUpOver.IsOpen = true;
    }));    
}
private void Window_Deactivated(object sender, EventArgs e)
{
    popUpOver.IsOpen = false;
}
private void Window_StateChanged(object sender, EventArgs e)
{
    popUpOver.IsOpen = this.WindowState != WindowState.Minimized;
}
private void Window_LocationChanged(object sender, EventArgs e)
{
    var offset = popUpOver.HorizontalOffset;
    popUpOver.HorizontalOffset = offset + 1;
    popUpOver.HorizontalOffset = offset;
}

<Popup x:Name="popUpOver" IsOpen="True" StaysOpen="True" Placement="RelativePoint" PlacementRectangle="300,300,500,500">
    <Button Content="OVER" Width="100" Height="30"/>
</Popup>

PopUp 移动被:How can I move a WPF Popup when its anchor element moves?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-28
    • 2021-05-10
    • 1970-01-01
    • 2020-06-17
    • 2011-09-05
    • 2014-03-05
    • 1970-01-01
    相关资源
    最近更新 更多