i have problem in uwp . have page contains grid (it holds bit of top of page) , below grid there pivot contains 2 pivot items , every pivot item contains list view.
i want when scroll vertically(up down) in these list views original page scroll when top grid hidden.
here's i'm looking for:
and here source of xaml :
<page x:name="thispage" x:class="bindingsample2.pagecategories.pageartistinfo" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:bindingsample2" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:ignorable="d"> <grid background="{themeresource applicationpagebackgroundthemebrush}"> <grid> <grid.rowdefinitions> <rowdefinition height="auto"/> <rowdefinition height="*"/> </grid.rowdefinitions> <relativepanel grid.row="0"> <grid x:name="artistposter" height="200" relativepanel.alignleftwithpanel="true" relativepanel.alignrightwithpanel="true"> <stackpanel x:name="artistinfogrid" padding="20" verticalalignment="bottom" horizontalalignment="stretch" orientation="horizontal"> <stackpanel.background> <lineargradientbrush endpoint="0.5,0" startpoint="0.5,1"> <gradientstop color="{staticresource appbackgroundcolor }"/> <gradientstop color="transparent" offset="0.85"/> <gradientstop color="transparent" offset="1"/> </lineargradientbrush> </stackpanel.background> <grid> <ellipse x:name="artistthemb" stretch="uniform" height="100" width="100"> <ellipse.fill> <imagebrush stretch="fill" imagesource="ms-appx:///assets/wslogo.png"/> </ellipse.fill> </ellipse> </grid> <grid x:name="moreinfo" verticalalignment="center" margin="10,0"> <grid.rowdefinitions> <rowdefinition height="auto"/> <rowdefinition height="auto"/> </grid.rowdefinitions> <textblock x:name="artistname" grid.row="0" text="artistname"/> <textblock x:name="artistfans" grid.row="1" text="artistfans"/> </grid> </stackpanel> </grid> </relativepanel> <pivot height="{binding elementname=thispage,path=actualheight,updatesourcetrigger=propertychanged,mode=twoway}" x:name="pagepivot" grid.row="1" selectionchanged="pagepivot_selectionchanged"> <pivotitem header="albums"> <grid> <grid.resources> <collectionviewsource x:name="artistalbumscvs"/> </grid.resources> <listview x:name="featuredalbumslist" itemssource="{binding source={staticresource artistalbumscvs}}" selectionmode="none" isitemclickenabled="true" itemclick="artistalbumslist_itemclick" itemcontainerstyle="{staticresource listviewcontainerstrecher}"> <listview.itemtemplate> <datatemplate > <grid> <grid.columndefinitions> <columndefinition width="80"/> <columndefinition width="*"/> </grid.columndefinitions> <image grid.column="0" maxwidth="60" source="{binding poster_60x60}" horizontalalignment="center"/> <grid grid.column="1" verticalalignment="center"> <grid.rowdefinitions> <rowdefinition height="auto"/> <rowdefinition height="auto"/> </grid.rowdefinitions> <textblock grid.row="0" text="{binding artist}"/> <textblock grid.row="1" text="{binding album}"/> </grid> </grid> </datatemplate> </listview.itemtemplate> </listview> </grid> </pivotitem> <pivotitem header="songs"> <grid> <grid.resources> <collectionviewsource x:name="artistsongscvs"/> </grid.resources> <listview x:name="featuredlist" itemssource="{binding source={staticresource artistsongscvs}}" itemtemplate="{staticresource musicitemdatatemplate}" selectionmode="none" isitemclickenabled="true" scrollviewer.bringintoviewonfocuschange="true" itemclick="artistsongslist_itemclick" itemcontainerstyle="{staticresource listviewcontainerstrecher}"> </listview> </grid> </pivotitem> </pivot> <visualstatemanager.visualstategroups> <visualstategroup x:name="screensizes"> <visualstate> <visualstate.statetriggers> <adaptivetrigger minwindowheight="550"/> </visualstate.statetriggers> <visualstate.setters> <setter target="artistposter.height" value="200"/> </visualstate.setters> </visualstate> <visualstate> <visualstate.statetriggers> <adaptivetrigger minwindowheight="0"/> </visualstate.statetriggers> <visualstate.setters> <setter target="artistposter.height" value="140"/> </visualstate.setters> </visualstate> </visualstategroup> </visualstatemanager.visualstategroups> </grid> </grid>
regards
i want when scroll vertically(up down) in these list views original page scroll when top grid hidden.
you can find scrollviewer
in each listviewer
visualtreehelper
, register viewchanged event of scrollviewer
in loaded
event of listview
. example here:
private void featuredlist_loaded(object sender, routedeventargs e) { var featuredlistscrollviewer = findchildoftype<scrollviewer>(featuredlist); if (featuredlistscrollviewer != null) featuredlistscrollviewer.viewchanged += scrollviewer_viewchanged; } private void featuredalbumslist_loaded(object sender, routedeventargs e) { var featuredalbumslistscrollviewer = findchildoftype<scrollviewer>(featuredalbumslist); if (featuredalbumslistscrollviewer != null) featuredalbumslistscrollviewer.viewchanged += scrollviewer_viewchanged; } private void scrollviewer_viewchanged(object sender, scrollviewerviewchangedeventargs e) { if (e.isintermediate) rtpanel.visibility = visibility.collapsed; else rtpanel.visibility = visibility.visible; } public static t findchildoftype<t>(dependencyobject root) t : class { var queue = new queue<dependencyobject>(); queue.enqueue(root); while (queue.count > 0) { dependencyobject current = queue.dequeue(); (int = 0; < visualtreehelper.getchildrencount(current); i++) { var child = visualtreehelper.getchild(current, i); var typedchild = child t; if (typedchild != null) { return typedchild; } queue.enqueue(child); } } return null; }
as can see, in viewchanged
event, if property isintermediate
of scrollviewerviewchangedeventargs
true, manipulation @ intermediate stage , not yet final; if false, manipulation final.
Comments
Post a Comment