public PlaylistDetailView() { TitleLabel = NSLabel.CreateWithFont(TitleFontName, TitleFontSize); TitleLabel.Identifier = "TitleLabel"; TitleLabel.TextColor = NSColor.FromRgb(51, 51, 51); DescriptionLabel = NSLabel.CreateWithFont(DescriptionFontName, DescriptionFontSize); DescriptionLabel.Identifier = "DescriptionLabel"; DescriptionLabel.TextColor = NSColor.FromRgb(142, 142, 142); SongsTable = new SongsListView(); outerStack = new NSStackView(); outerStack.TranslatesAutoresizingMaskIntoConstraints = false; outerStack.Orientation = NSUserInterfaceLayoutOrientation.Vertical; outerStack.Distribution = NSStackViewDistribution.Fill; outerStack.Spacing = 10; outerStack.EdgeInsets = new NSEdgeInsets(20, 0, 0, 0); outerStack.AddArrangedSubview(TitleLabel); outerStack.AddArrangedSubview(DescriptionLabel); outerStack.AddArrangedSubview(SongsTable); AddSubview(outerStack); AddConstraint(MinimumHeight(SongsTable, 100)); AddConstraints(FillHorizontal(true, TitleLabel, DescriptionLabel)); AddConstraints(FillHorizontal(outerStack, false)); AddConstraints(FillVertical(outerStack, false)); }
public ChatPage() { InitializeComponent(); BindingContext = new ChatViewModel(); MessagingCenter.Subscribe <object, object>(this, "ScollList", (sender, args) => { SongsListView.ScrollTo(args, ScrollToPosition.End, true); }); }
private void SongsListViewJumpToActiveSong() { var activeSong = PlayerViewModel.ActiveSong; if (activeSong == null) { return; } SongsListView.ScrollIntoView(activeSong, ScrollIntoViewAlignment.Leading); }
private void SetupAnimations() { const float maxOffset = -16f; var scrollViewer = SongsListView.FindDescendant <ScrollViewer>(); var scrollerPropSet = ElementCompositionPreview.GetScrollViewerManipulationPropertySet(scrollViewer); var coverVisual = CoverGrid.GetVisual(); var coverPanelVisual = CoverPanel.GetVisual(); var titlePanelVisual = TitlePanel.GetVisual(); var contrastTitleTextVisual = ContrastTitleTextBlock.GetVisual(); var accentTitleTextVisual = AccentTitleTextBlock.GetVisual(); var subtitleTextVisual = SubtitleTextBlock.GetVisual(); var c = this.GetVisual().Compositor; var coverPanelCoordinateY = c.CreateExpressionAnimation("Clamp(scroller.Translation.Y * factor, -16, 0)"); coverPanelCoordinateY.SetReferenceParameter("scroller", scrollerPropSet); coverPanelCoordinateY.SetScalarParameter("factor", 0.2f); coverPanelVisual.StartAnimation("Offset.Y", coverPanelCoordinateY); var scaleAlgorithm = "Clamp(1 - layer.Offset.Y / maxOffset, 0.4, 1)"; var scaleAnim = c.CreateExpressionAnimation(scaleAlgorithm); scaleAnim.SetReferenceParameter("layer", coverPanelVisual); scaleAnim.SetScalarParameter("maxOffset", maxOffset); coverVisual.StartAnimation("Scale.X", scaleAnim); coverVisual.StartAnimation("Scale.Y", scaleAnim); var titlePanelCoordinateXAnim = c.CreateExpressionAnimation("coverOriginWidth * (layer.Scale.X - 1.0)"); titlePanelCoordinateXAnim.SetReferenceParameter("layer", coverVisual); titlePanelCoordinateXAnim.SetScalarParameter("coverOriginWidth", 76f); titlePanelVisual.StartAnimation("Offset.X", titlePanelCoordinateXAnim); var titlePanelCoordinateYAnim = c.CreateExpressionAnimation("layer.Offset.Y * 1.5"); titlePanelCoordinateYAnim.SetReferenceParameter("layer", coverPanelVisual); titlePanelVisual.StartAnimation("Offset.Y", titlePanelCoordinateYAnim); //var titleTextColorAnim = c.CreateExpressionAnimation("layer.Offset.Y < maxOffset / 2 ? whiteColor : accentColor"); //titleTextColorAnim.SetReferenceParameter("layer", coverPanelVisual); //titleTextColorAnim.SetScalarParameter("maxOffset", maxOffset); //titleTextColorAnim.SetColorParameter("whiteColor", Colors.White); //titleTextColorAnim.SetColorParameter("accentColor", ((SolidColorBrush)TitleTextBlock.Foreground).Color); var accentTitleOpacityAnim = c.CreateExpressionAnimation("1 - layer.Offset.Y / maxOffset"); accentTitleOpacityAnim.SetReferenceParameter("layer", coverPanelVisual); accentTitleOpacityAnim.SetScalarParameter("maxOffset", maxOffset); accentTitleTextVisual.StartAnimation("Opacity", accentTitleOpacityAnim); var contrastTitleOpcityAnim = c.CreateExpressionAnimation("layer.Offset.Y / maxOffset"); contrastTitleOpcityAnim.SetReferenceParameter("layer", coverPanelVisual); contrastTitleOpcityAnim.SetScalarParameter("maxOffset", maxOffset); contrastTitleTextVisual.StartAnimation("Opacity", contrastTitleOpcityAnim); var subtitleTextOpacityAnim = c.CreateExpressionAnimation("1 - layer.Offset.Y / maxOffset"); subtitleTextOpacityAnim.SetReferenceParameter("layer", coverPanelVisual); subtitleTextOpacityAnim.SetScalarParameter("maxOffset", maxOffset); subtitleTextVisual.StartAnimation("Opacity", subtitleTextOpacityAnim); }