我正在开发一个屏幕,这个屏幕我有一个网格。在这个网格中,我有一个UserControl WebBrowser。我正在使用此组件来显示XML格式,并突出显示语法(带颜色)。要显示的文本是通过Binding完成的,因此组件是UserControl,就像接受Binding一样的相同修改所做的那样(因为原始文件不通过Binding接受内容)。但是我遇到了以下问题:当用户在某个点调整程序屏幕大小时,WebBrowser的主体超出了网格的边界,使得屏幕底部的网格很奇怪。 我测试了其他组件,但这个问题没有发生。
看我的UserControl:
<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格式和语法颜色的最佳组件。但如果你知道另一个比它更好更容易使用,我接受建议。 欢迎任何帮助。
祝你好运, 古斯塔沃。
答案 0 :(得分: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" />