2016-11-21 2 views
1

Я хочу показать свой Flair в WPF Browser Контроль и размер его до минимального размера.Размер WPF Browser для его содержимого HTML

XAML:

<Window x:Class="TestProject.MainWindow" 
     [...] 
     Title="MainWindow" 
     MaxHeight="500" 
     MaxWidth="500" 
     Loaded="Window_Loaded" 
     SizeToContent="WidthAndHeight" 
     Height="86.453" 
     Width="163.44"> 
<Grid> 
    <WebBrowser x:Name="browser"></WebBrowser>   
</Grid> 

Вот мой код-Behind:

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private string CreateHTML() 
    { 
     StringBuilder builder = new StringBuilder(); 
     builder.AppendLine("<!DOCTYPE html>"); 
     builder.AppendLine("<html>"); 
     builder.AppendLine("<body>"); 
     builder.AppendLine("<a href=\"http://stackexchange.com/users/5852250\">"); 
     builder.AppendLine("<img src=\"http://stackexchange.com/users/flair/5852250.png?theme=dark\" width=\"208\" height=\"58\" alt=\"profile for Felix D. on Stack Exchange, a network of free, community-driven Q&amp;A sites\" title=\"profile for Felix D. on Stack Exchange, a network of free, community-driven Q&amp;A sites\">"); 
     builder.AppendLine("</a>"); 
     builder.AppendLine("</body>"); 
     builder.AppendLine("<html>"); 
     return builder.ToString(); 
    } 

    private void Window_Loaded(object sender, RoutedEventArgs e) 
    { 
     string htmlString = CreateHTML();    
     browser.NavigateToString(htmlString);    
    }   
} 

Я хочу, чтобы браузер (вести себя как SizeToContent="WidthAndHeight" для его содержания).

Я не нашел рабочего решения.

Я встроил Microsoft.mshtml и попытался получить sth. из browser.Document, но я пока не добился никакого прогресса.

Любое сделанное sth. аналогичный ?

+2

Вам не нужен полный веб-браузер, элемент управления изображением WPF может указывать на чутье прямо, как это '' –

ответ

4

Вы можете установить размер браузера 0,0 Прежде чем перейти, а затем после загрузки документа завершена, вы можете установить Width и Height управления к scrollWidth и scrollHeight документа:

private void browser_LoadCompleted(object sender, NavigationEventArgs e) 
{ 
    browser.Width = ((dynamic)browser.Document).Body.parentElement.scrollWidth; 
    browser.Height = ((dynamic)browser.Document).Body.parentElement.scrollHeight; 
} 
private void browser_Navigating(object sender, NavigatingCancelEventArgs e) 
{ 
    browser.Width = 0; 
    browser.Height = 0; 
} 

Примечание

1) Сообщение является ответом Размер WPF Browser для его содержимого.. Если проблема касается именно изображения, вы можете положиться на элемент управления Image, как упоминалось также в первом комментарии.

2) Когда показ чутье с помощью WebBrowser управления, вам необходимо отключить скроллинг, установив scroll="no" атрибут для body тега. Также вам необходимо установить style=\"padding:0px;margin:0px;\" для ярлыка body. Также удалите границы изображения, установив style="border:0px;" для тега img, а также, возможно, некоторые другие исправления html и css.

3) В окнах с настройками DPI, установленными на 125%, вам необходимо умножить значения на 0,8.

+0

При тестировании рассмотрите эти примечания: ** 1) ** В окне с настройками DPI установлено на '120%' вам нужно умножить значения на '0,8'. ** 2) ** Вы можете проверить его, перейдя на сайт, например 'http: // www.google.com'. ** 3) ** Чтобы протестировать ваш html, измените тег body на 'builder.AppendLine (" ");' –

+0

Вы проверили это? Поскольку я получаю 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException', вызывает' ((динамический) WebBrowser.Document) .Body' - null .... –

+0

Да, я тестирую его, и он работает правильно. (VS 2013.4) –

1

http://setmy.browsersize.com/ Помогает ли это? Это, по-видимому, позволяет вам установить свой браузер в установленный размер для целей разработки. Я чувствую, что это может быть толчок в правильном направлении?

<a href='javascript:(function(w,h){ 
var n=window,d=document,s=n.screen; 
function r(o){  
    n.resizeTo(Number(w)+o,h); 
    return n.innerWidth||d.body.clientWidth; 
} 
function c(t,u){ 
    return t>u?(t-u)>>1:0; 
} 
if(r(1)==r(0)) { 
    if(typeof p=="undefined"||p.closed){ 
     $("info").className="no_popup"; 
     p=n.open(n.location.href, 
      "resize_popup", 
      "menubar, 
      toolbar, 
      location, 
      directories, 
      status, 
      resizable, 
      titlebar, 
      ".split(",").join("=yes,")+", 
      width="+w+",height="+h+", 
      left="+c(s.width,w)+", 
      top="+c(s.height,h)); 
    } else { 
      p.focus(); 
    } 
    p.resizeTo(w,h);n=p; 
} 
if(w>s.width||h>s.height){ 
    n.moveTo(0,0); 
} 
})(640, 480);'>640 x 480</a> 
+0

Спасибо за ваш эффект, но это не решение, которое я ищу. Это просто установка фиксированной ширины/высоты для браузера. Я хочу, чтобы браузер настолько масштабировался с содержимым. Установка фиксированного размера - это только решение, если я могу получить размеры контента. –

+0

Я думаю, что есть способы получить эту информацию от JQuery - все, что вам нужно сделать, это передать ее в функцию, чтобы установить размеры браузера. – Mark

+0

Например - $ (документ).height() возвращает высоту HTML-документа (в отличие от $ (window) .height(), который возвращает высоту области просмотра. То же самое с .width() – Mark

Смежные вопросы