1

プロパティの説明に html があります。このプロパティをテキストブロック (ex texthide) にバインドすると、html がテキストブロックに表示されます。しかし、WebBrowser をこのプロパティにバインドできません。HTML文字列をWebBrowserにバインドするにはどうすればよいですか?

<ScrollViewer 
  HorizontalScrollBarVisibility="Disabled" 
  VerticalScrollBarVisibility="Auto" 
  Margin="25, 0, 0, 0" 
  Grid.Row="0">

  <StackPanel Orientation="Vertical">

    <TextBlock 
      x:Name="TextHide"  
      Text="{Binding Path=Descrption}" 
      Style="{StaticResource servicesText}" 
      TextWrapping="Wrap" />
    <phone:WebBrowser 
      Source="{Binding Descrption}" 
      x:Name="webBrowserHTML" 
      Foreground="Black" 
      Loaded="webBrowserHTML_Loaded" />

<!--<Image Source="../Images/cont_banner.png" Width="270"  Grid.Row="1"/>-->

    <Button Grid.Row="1">
      <Button.Background>
        <ImageBrush ImageSource="../Images/cont_banner.png" />
      </Button.Background>
      <Button.Content>
        <HyperlinkButton Content="" NavigateUri="callto:3950" />
      </Button.Content>
    </Button>

  </StackPanel>

</ScrollViewer>

アイデアはありますか?よろしくお願いします

4

1 に答える 1

5

WebBrowserHTML をコントロールに直接バインドできるようにするには、添付プロパティを作成する必要があります。

namespace YourAppNamespace
{
    public static class WebBrowserHelper
    {
        public static readonly DependencyProperty HtmlProperty = DependencyProperty.RegisterAttached(
            "Html", typeof(string), typeof(WebBrowserHelper), new PropertyMetadata(OnHtmlChanged));

        public static string GetHtml(DependencyObject dependencyObject)
        {
            return (string)dependencyObject.GetValue(HtmlProperty);
        }

        public static void SetHtml(DependencyObject dependencyObject, string value)
        {
            dependencyObject.SetValue(HtmlProperty, value);
        }

        private static void OnHtmlChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            var browser = d as WebBrowser;

            if (browser == null)
                return;

            var html = e.NewValue.ToString();

            browser.NavigateToString(html);
        }
    }
}

必要な XAML 名前空間宣言を追加します。

xmlns:cxi="clr-namespace:YourAppNamespace"

そして、次のように使用します。

<phone:WebBrowser cxi:WebBrowserHelper.Html="{Binding Question.Body}" />

ソース

于 2012-11-23T20:53:18.627 に答える