C# 如何在UWP上从rss播放youtube

C# 如何在UWP上从rss播放youtube,c#,wordpress,uwp,rss,C#,Wordpress,Uwp,Rss,我使用的是appstudio代码,当我从wordpress获得帖子时,我可以查看图片、文本和所有内容,但当我尝试播放youtube视频时,打开Microsoft edge向我显示视频 有人能帮我吗 下面是Html块代码 <was_controls:HtmlBlock Grid.Row="2" FlowDirection="RightToLeft"

我使用的是appstudio代码,当我从wordpress获得帖子时,我可以查看图片、文本和所有内容,但当我尝试播放youtube视频时,打开Microsoft edge向我显示视频 有人能帮我吗 下面是Html块代码

                        <was_controls:HtmlBlock
                        Grid.Row="2"
                        FlowDirection="RightToLeft"
                        Margin="24,10,24,130"
                        Style="{StaticResource HtmlPersonalStyle}"
                        FontSize="{Binding ViewModel.FontSize, ElementName=root}"
                        Source="{Binding ViewModel.SelectedItem.Description}" Grid.RowSpan="2"/>

以及Html样式:

    <Style TargetType="was:HtmlBlock" x:Key="HtmlPersonalStyle">
    <Setter Property="Foreground" Value="{ThemeResource ApplicationHeaderForegroundThemeBrush}"/>
    <Setter Property="DocumentStyle">
        <Setter.Value>
            <was:DocumentStyle>
                <was:DocumentStyle.Channel9>
                    <was:ImageStyle HorizontalAlignment="Center"/>
                </was:DocumentStyle.Channel9>
                <was:DocumentStyle.Img>
                    <was:ImageStyle HorizontalAlignment="Center"/>
                </was:DocumentStyle.Img>
                <was:DocumentStyle.P>
                    <was:ParagraphStyle Margin="0,24,0,24"  />
                </was:DocumentStyle.P>

                <was:DocumentStyle.Code>
                    <was:TextStyle Foreground="{StaticResource NavigationPaneButton}" FontWeight="Bold" />
                </was:DocumentStyle.Code>
                <was:DocumentStyle.FigCaption>
                    <was:ParagraphStyle Foreground="SaddleBrown"/>
                </was:DocumentStyle.FigCaption>
                <was:DocumentStyle.Ul>
                    <was:ContainerStyle Margin="0,24,0,24" />
                </was:DocumentStyle.Ul>
                <was:DocumentStyle.H1>
                    <was:ParagraphStyle FontSizeRatio="2" />
                </was:DocumentStyle.H1>
                <was:DocumentStyle.H2>
                    <was:ParagraphStyle />
                </was:DocumentStyle.H2>
                <was:DocumentStyle.Li>
                    <was:ListStyle FontWeight="Bold" Margin="10,0,0,0"/>
                </was:DocumentStyle.Li>
                <was:DocumentStyle.Span>
                    <was:TextStyle Foreground="#FF104F83" FontStyle="Normal"/>
                </was:DocumentStyle.Span>
                <was:DocumentStyle.A>
                    <was:TextStyle Foreground="{StaticResource NavigationPaneButton}" FontWeight="Bold"/>
                </was:DocumentStyle.A>
                <was:DocumentStyle.Cite>
                    <was:TextStyle Foreground="{StaticResource NavigationPaneButton}" FontWeight="Bold"/>
                </was:DocumentStyle.Cite>
                <was:DocumentStyle.YouTube>
                    <was:ImageStyle HorizontalAlignment="Center"/>
                </was:DocumentStyle.YouTube>
                <was:DocumentStyle.Figure>
                    <was:ContainerStyle Margin="0,24,0,24"/>
                </was:DocumentStyle.Figure>
                <was:DocumentStyle.Time>
                    <was:TextStyle FontSizeRatio="0.9" FontStyle="Italic" />
                </was:DocumentStyle.Time>
            </was:DocumentStyle>
        </Setter.Value>
    </Setter>
</Style>

搜索和编辑代码两周后,我终于修复了它! 要解决此问题,您必须编辑
AppStudio.Uwp
dll文件,我将演示如何:

首先,您必须从安装AppStudio.Uwp源代码

之后,必须从项目中删除AppStudio.Uwp Nuget包 然后用visual studio打开
AppStudio.Uwp
源代码,并转到以下路径:
AppStudio.Uwp\Controls\HtmlBlock\Writers

然后打开此文件:
IFrameVideoWriter.cs

之后,用以下代码替换
DependencyObject GetControl

 public override DependencyObject GetControl(HtmlFragment fragment)
    {
        var node = fragment as HtmlNode;
        MediaElement play = new MediaElement();
        if (node != null)
        {
            Windows.Storage.ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
            Windows.Storage.StorageFolder localFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
            localSettings.Values["itson"] = null;
            string src = GetIframeSrc(node).ToString();
            string id = GetVideoId(src);
            string check = "";
            var grid = new Grid
            {
                HorizontalAlignment = HorizontalAlignment.Stretch,
        };

            grid.Tapped += async (sender, e) =>
            {
                play.HorizontalAlignment = HorizontalAlignment.Stretch;
                if (localSettings.Values["itson"] == null || id != check)
                {
                        var url = await YouTube.GetVideoUriAsync(id, YouTubeQuality.Quality360P);
                        play.Source = url.Uri;
                        localSettings.Values["qv"] = "360";

                    }
                    check = id;
                    play.AreTransportControlsEnabled = true;
                    localSettings.Values["itson"] = "true";
                    play.Play();

                }
            };

            grid.PointerEntered += (sender, e) =>
            {
                Window.Current.CoreWindow.PointerCursor = _handCursor;
            };
            grid.PointerExited += (sender, e) =>
            {
                Window.Current.CoreWindow.PointerCursor = _arrowCursor;
            };

            AddColumn(grid);
            AddColumn(grid);
            AddColumn(grid);

            var screenShot = GetImageControl((i) => SetScreenshot(i, node));

            Grid.SetColumn(screenShot, 0);
            Grid.SetColumnSpan(screenShot, 3);
            grid.Children.Add(screenShot);

            var player = GetImageControl((i) => i.Source = GetPlayerImage());
            Grid.SetColumn(player, 1);
            grid.Children.Add(player);
            Grid.SetColumn(play, 0);
            Grid.SetColumnSpan(play, 4);
            grid.Children.Add(play);
            return grid;
        }

        return null;
    }
当您完成构建文件并将dll文件导入到项目时,您就完成了!
希望这将有助于任何人寻找它我已经花了两个星期来解决我自己

搜索和编辑代码两周后,我终于修复了它! 要解决此问题,您必须编辑
AppStudio.Uwp
dll文件,我将演示如何:

首先,您必须从安装AppStudio.Uwp源代码

之后,必须从项目中删除AppStudio.Uwp Nuget包 然后用visual studio打开
AppStudio.Uwp
源代码,并转到以下路径:
AppStudio.Uwp\Controls\HtmlBlock\Writers

然后打开此文件:
IFrameVideoWriter.cs

之后,用以下代码替换
DependencyObject GetControl

 public override DependencyObject GetControl(HtmlFragment fragment)
    {
        var node = fragment as HtmlNode;
        MediaElement play = new MediaElement();
        if (node != null)
        {
            Windows.Storage.ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
            Windows.Storage.StorageFolder localFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
            localSettings.Values["itson"] = null;
            string src = GetIframeSrc(node).ToString();
            string id = GetVideoId(src);
            string check = "";
            var grid = new Grid
            {
                HorizontalAlignment = HorizontalAlignment.Stretch,
        };

            grid.Tapped += async (sender, e) =>
            {
                play.HorizontalAlignment = HorizontalAlignment.Stretch;
                if (localSettings.Values["itson"] == null || id != check)
                {
                        var url = await YouTube.GetVideoUriAsync(id, YouTubeQuality.Quality360P);
                        play.Source = url.Uri;
                        localSettings.Values["qv"] = "360";

                    }
                    check = id;
                    play.AreTransportControlsEnabled = true;
                    localSettings.Values["itson"] = "true";
                    play.Play();

                }
            };

            grid.PointerEntered += (sender, e) =>
            {
                Window.Current.CoreWindow.PointerCursor = _handCursor;
            };
            grid.PointerExited += (sender, e) =>
            {
                Window.Current.CoreWindow.PointerCursor = _arrowCursor;
            };

            AddColumn(grid);
            AddColumn(grid);
            AddColumn(grid);

            var screenShot = GetImageControl((i) => SetScreenshot(i, node));

            Grid.SetColumn(screenShot, 0);
            Grid.SetColumnSpan(screenShot, 3);
            grid.Children.Add(screenShot);

            var player = GetImageControl((i) => i.Source = GetPlayerImage());
            Grid.SetColumn(player, 1);
            grid.Children.Add(player);
            Grid.SetColumn(play, 0);
            Grid.SetColumnSpan(play, 4);
            grid.Children.Add(play);
            return grid;
        }

        return null;
    }
当您完成构建文件并将dll文件导入到项目时,您就完成了!
希望这将有助于任何人寻找它我已经花了两个星期来解决我自己

您是如何开发应用程序的?您正在使用Visual Studio.NET吗?您是否使用C#+XAML?如果获得提要的HTML,则可以使用WebView控件显示内容。如果您需要一个自定义视图,您应该自己解析内容并显示每个元素(文本、图像)。这包括显示YouTube内容。我使用的是c#+xamllanguage@SuperJMN你能给我一个webview控件的例子吗…@louay
HtmlBlock
从AppStudio将HTML转换为XAML。Youtube无法在
MediaPlayerElement
中播放。所以你必须创建自己的Youtube播放器。@VijayNirmal如何在appstudio保存后从我的本地获取html!您是如何开发应用程序的?您正在使用Visual Studio.NET吗?您是否使用C#+XAML?如果获得提要的HTML,则可以使用WebView控件显示内容。如果您需要一个自定义视图,您应该自己解析内容并显示每个元素(文本、图像)。这包括显示YouTube内容。我使用的是c#+xamllanguage@SuperJMN你能给我一个webview控件的例子吗…@louay
HtmlBlock
从AppStudio将HTML转换为XAML。Youtube无法在
MediaPlayerElement
中播放。所以你必须创建自己的Youtube播放器。@VijayNirmal如何在appstudio保存后从我的本地获取html!