我正在创建自定义传输控件。在那,我添加了一个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部件中为AppBarButton
设置了Visibility="Collapsed"
。我很惊讶,即使我设置了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;
解决了问题问题。不过,我想了解上面的行如何影响我的程序。整个代码包含在for参考部分
参考:
这是我的整个代码
- custommediaTransportControls.cs-从
MediaTransportControls
派生的类 - MediaPlayerDictionary.XAML -
ResourceDictionary
- videospage.xaml- C#我使用此
CustomMediaTransportControls
的页面的一部分
我不确定是否要删除这条线可以解决该问题,因为没有此行的代码,我遇到了相同的问题。但是我找到了解决这个问题的解决方法:
添加可见度的属性以及听众:
public Visibility CompactOverlayButtonVisibility
{
get { return (Visibility)GetValue(CompactOverlayButtonVisibilityProperty); }
set { SetValue(CompactOverlayButtonVisibilityProperty, value); }
}
public static readonly DependencyProperty CompactOverlayButtonVisibilityProperty =
DependencyProperty.Register(nameof(CompactOverlayButtonVisibility) , typeof(Visibility), typeof(CustomMediaTransportControls), new PropertyMetadata(Visibility.Visible, OnVisibisityChanged));
internal static void OnVisibisityChanged(DependencyObject d, DependencyPropertyChangedEventArgs e){
if (((CustomMediaTransportControls)d).compactOverlayButton != null)
{
if ((Visibility)e.NewValue != Visibility.Visible)
((CustomMediaTransportControls)d).commandBar.PrimaryCommands.Remove(((CustomMediaTransportControls)d).compactOverlayButton);
else if (!((CustomMediaTransportControls)d).commandBar.PrimaryCommands.Contains(((CustomMediaTransportControls)d).compactOverlayButton))
((CustomMediaTransportControls)d).commandBar.PrimaryCommands.Insert(4, ((CustomMediaTransportControls)d).compactOverlayButton);
((CustomMediaTransportControls)d).compactOverlayButton.Visibility = Visibility.Visible;
}
并将以下内容添加到您的ApplyTemplateMethod:
commandBar = GetTemplateChild("MediaControlsCommandBar") as CommandBar;
compactOverlayButton = GetTemplateChild("CompactOverlayButton") as AppBarButton;
if (CompactOverlayButtonVisibility != Visibility.Visible)
commandBar.PrimaryCommands.Remove(compactOverlayButton);
else if(!commandBar.PrimaryCommands.Contains(compactOverlayButton))
commandBar.PrimaryCommands.Insert(4, compactOverlayButton);
compactOverlayButton.Visibility = Visibility.Visible;
但是,您可能想调查为什么在XAML代码中设置的代码将可见度从代码更改。也许所有appbarbuttons也不是如此。您可以尝试一下,然后在此处查看相关的源代码。如果您发现原因可能会找到更好的解决方案。