【问题标题】:Resize body of a WebBrowser as UserControl将 WebBrowser 的主体大小调整为 UserControl
【发布时间】:2012-10-26 21:12:38
【问题描述】:

我正在开发一个屏幕,这个屏幕我有一个网格。在这个网格中,我有一个 UserControl WebBrowser。我正在使用这个组件来显示 XML 格式并突出显示语法(用颜色)。要显示的文本是通过 Binding 完成的,因此该组件是一个 UserControl,就像对接受 Binding 的相同修改所做的那样(因为原始不接受通过 Binding 的内容)。但是我遇到了以下问题:当用户在某个点调整程序的屏幕大小时,WebBrowser 的主体超出了网格的边界,使得屏幕在网格的底部很奇怪。 我用其他组件测试过,没有出现这个问题。

看我的用户控件:

<UserControl x: Class = "Geraes.Library.Core.GUI.WPF.Controls.XmlBrowserControl" 
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns: x = "http://schemas.microsoft.com/winfx/2006/xaml"
x: Name = "thisControl">
   <Grid Margin="0,0,0,0" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
     <WebBrowser Name="WebBrowser" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" />
   </ Grid>
</ UserControl>

在这里,我如何使用它:

<ct:XmlBrowserControl XmlDoc="{Binding ContentString}" Grid.Row="1" />

再说一次,我不明白为什么会这样,因为其他组件在这个网格中也能正常工作。

另一件事:我们正在使用 WebBrowser,因为到目前为止,它是显示 XML 格式和语法颜色的最佳组件。但是,如果您知道另一个比它更好且易于使用的产品,我会接受建议。 欢迎任何帮助。

最好的问候, 古斯塔沃。

【问题讨论】:

    标签: c# .net wpf user-controls webbrowser-control


    【解决方案1】:

    我在使用 webbrowser 控件时遇到了类似的问题,最后我改用 awesomium 并发现它更好用。

    我想调整 webbrowser(或 webcontrol)内容的大小以适应没有滚动条的内容,这样我就可以使用包含元素的滚动条(在我的例子中是一个网格)。我还从自定义控件开始,但随后切换到将绑定源添加为附加属性,并在内容加载后设置大小和可见性。我的情况是我使用你本地化存储的 html 字符串,但你可以使用 uri 代替

    using System;
    using System.Windows;
    using Awesomium.Windows.Controls;
    using Awesomium.Core;
    
    namespace utilities
    {
    
        public class WebBrowserHelper {
    
            public static readonly DependencyProperty BodyProperty =
                DependencyProperty.RegisterAttached("Body", typeof (string), typeof(WebBrowserHelper), new PropertyMetadata(OnBodyChanged));
    
            public static string GetBody(DependencyObject dependencyObject) {
                return (string) dependencyObject.GetValue(BodyProperty);
            }
    
            public static void SetBody(DependencyObject dependencyObject, string body) {
                dependencyObject.SetValue(BodyProperty, body);
            }
    
            private static void ScrollDataReceivedDelegate(object sender, ScrollDataEventArgs e)
            {
                var webControl = (Awesomium.Windows.Controls.WebControl) sender;
                webControl.Height = e.ScrollData.ContentHeight;
                webControl.Width = e.ScrollData.ContentWidth;
                webControl.Visibility = Visibility.Visible;
            }
    
            private static void OnBodyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) {
                var webControl = (Awesomium.Windows.Controls.WebControl) d;
                webControl.LoadHTML((string)e.NewValue);
                webControl.ScrollDataReceived += new ScrollDataReceivedEventHandler(ScrollDataReceivedDelegate);
                webControl.LoadCompleted += delegate {
                    webControl.RequestScrollData();
                };
            }
        }
    }
    

    还有命名空间:

    xmlns:utilities="clr-namespace:utilities;assembly=utilities"
    xmlns:awesome="clr-namespace:Awesomium.Windows.Controls;assembly=Awesomium.Windows.Controls"
    

    还有 xaml:

    <awesome:WebControl 
        HorizontalAlignment="Left" 
        Width="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Grid}}, Path=ActualWidth}" 
        Height="1" 
        utilities:WebBrowserHelper.Body="{Binding html}" 
        Visibility="Collapsed" />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多