【发布时间】:2017-04-22 17:25:36
【问题描述】:
我正在创建自定义传输控件。在那,我添加了一个 AppBarButton。为了改变它的可见性,我为它创建了一个属性,但由于某种原因,它不起作用。 AppBarButton 始终可见。
属性代码
//To change Visibility for CompactOverlayButton
public bool IsCompactOverlayButtonVisible
{
get
{
return compactOverlayButton != null && compactOverlayButton.Visibility == Visibility.Visible;
}
set
{
if (compactOverlayButton != null) //To neglect the Visibility check before the Template has been applied
{
compactOverlayButton.Visibility = value ? Visibility.Visible : Visibility.Collapsed;
}
}
}
所以我开始调试它。我在 C# 部分中找不到任何错误,因此我在 XAML 部分中将Visibility="Collapsed" 设置为AppBarButton。我很惊讶,即使我设置了Visibility="Collapsed" AppBarButton 仍然可见。
这是我在 XAML 部分中的代码
<AppBarButton x:Name='CompactOverlayButton'
Style='{StaticResource AppBarButtonStyle}'
MediaTransportControlsHelper.DropoutOrder='17' Visibility="Collapsed">
<AppBarButton.Icon>
<FontIcon Glyph=""/>
</AppBarButton.Icon>
</AppBarButton>
更新:
我找到了导致它的代码行。它来自我使用过 CustomMediaTransportControls 的页面的 C# 部分。
造成这种情况的线路是
var youtubeUrl = await YouTube.GetVideoUriAsync("QTYVJhy04rs", YouTubeQuality.Quality144P, videoQuality);
我已通过在上述代码行之后设置CustomMediaControl.IsCompactOverlayButtonVisible = false; 来解决问题。不过,我想知道上面的行是如何影响我的程序的。整个代码已包含在供参考部分中
供参考:
这是我的全部代码
-
CustomMediaTransportControls.cs - 派生自
MediaTransportControls的类 -
MediaPlayerDictionary.xaml -
ResourceDictionary -
VideosPage.xaml - 我使用过这个
CustomMediaTransportControls的页面的C#部分
【问题讨论】:
-
在 XAML 中,您在某处使用
',在其他地方使用"。为什么?试着让它"无处不在。 -
@MarianDolinský MediaPlayerElement 控件的默认样式和模板在 generic.xaml 中定义,使用的是
',所以我遵循了这一点。我尝试使用",但没有任何区别。 -
这很奇怪,在 XAML 中从未见过
'。顺便说一句,您的应用针对的是哪个版本的 W10?并且后面的代码不起作用,因为您使用以c开头的名称,但是在 XAML 中按钮的名称以C开头。 -
@MarianDolinský Min 版本 14393 - 目标版本 15063。我使用
var compactOverlayButton = GetTemplateChild("CompactOverlayButton") as Button;创建按钮。我将在帖子中附上完整的代码。 -
为什么这么难?当您在 XAML 中定义
x:Name="MyElementName"时,您可以直接在像MyElementName.Visibility = Visibility.Collapsed;这样的代码中使用它。大多数情况下不需要GetTemplateChild。
标签: c# xaml uwp win-universal-app windows-10-universal