C# 如何在UWP上从rss播放youtube
我使用的是appstudio代码,当我从wordpress获得帖子时,我可以查看图片、文本和所有内容,但当我尝试播放youtube视频时,打开Microsoft edge向我显示视频 有人能帮我吗 下面是Html块代码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"
<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控件的例子吗…@louayHtmlBlock
从AppStudio将HTML转换为XAML。Youtube无法在MediaPlayerElement
中播放。所以你必须创建自己的Youtube播放器。@VijayNirmal如何在appstudio保存后从我的本地获取html!