设置可见性= "Collapsed"不会隐藏按钮。更新:我自己修复,但我想知道问题的原因



我正在创建自定义传输控件。在那,我添加了一个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="&#xEE40;"/>
    </AppBarButton.Icon>
</AppBarButton>

更新:

我发现了导致它的代码线。它来自我使用此CustomMediaTransportControls的页面的C#部分。

导致此的线是

var youtubeUrl = await YouTube.GetVideoUriAsync("QTYVJhy04rs", YouTubeQuality.Quality144P, videoQuality);

我通过在上述代码行之后设置CustomMediaControl.IsCompactOverlayButtonVisible = false;解决了问题问题。不过,我想了解上面的行如何影响我的程序。整个代码包含在for参考部分

参考:

这是我的整个代码

  1. custommediaTransportControls.cs-从 MediaTransportControls
  2. 派生的类
  3. MediaPlayerDictionary.XAML -ResourceDictionary
  4. videospage.xaml- C#我使用此CustomMediaTransportControls
  5. 的页面的一部分

我不确定是否要删除这条线可以解决该问题,因为没有此行的代码,我遇到了相同的问题。但是我找到了解决这个问题的解决方法:

添加可见度的属性以及听众:

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也不是如此。您可以尝试一下,然后在此处查看相关的源代码。如果您发现原因可能会找到更好的解决方案。

相关内容

  • 没有找到相关文章

最新更新