silverlight - Scrollable form control in Windows Phone 8 -
how make scrollable form similar of phone contact input panel in windows phone 8.1?
current method of stackpanel inside scrollviewer restricts scrolling when sip launches , have hit button choose other textboxes.
not idea ux situation , i've tried few options of web.
- increasing stackpanel's height beyond necessary size 350 pixels - didn't work, displaces form unevenly , doesn't return normal
- creating listbox suggested in site online didn't change either
- increasing down margin of last control didn't either
check below code has worked fine me.
chat.xaml.cs
using system; using system.componentmodel; using system.windows.controls; using system.windows.input; using system.linq; using system.windows; using system.windows.data; using system.windows.media; using microsoft.phone.controls; using phoneapplicationpage = microsoft.phone.controls.phoneapplicationpage; namespace liv.view { // resharper disable once redundantextendslistentry public partial class chat : phoneapplicationpage { private bool _flag; public chat() { initializecomponent(); } #region static chat header workaround public double oldheight; private translatetransform _translatetransform; #region translatey dependency property public static readonly dependencyproperty translateyproperty = dependencyproperty.register( "translateyproperty", typeof(double), typeof(chat), new propertymetadata(default(double), propertychangedcallback)); private static void propertychangedcallback(dependencyobject o, dependencypropertychangedeventargs e) { var chat = o chat; if (chat != null) { chat.updatetopmargin((double)e.newvalue); } } public double translatey { { return (double)getvalue(translateyproperty); } set { setvalue(translateyproperty, value); } } #endregion private void chatpage_onloaded(object sender, routedeventargs e) { var transform = ((application.current).rootvisual).rendertransform transformgroup; if (transform != null) { _translatetransform = transform.children.oftype<translatetransform>().firstordefault(); if (_translatetransform != null) { var binding = new binding("y") { source = _translatetransform }; bindingoperations.setbinding(this, translateyproperty, binding); } } } private void updatetopmargin(double translatey) { layoutroot.margin = new thickness(0, -translatey, 0, 0); } #endregion } }
chat.xaml
<phone:phoneapplicationpage x:class="liv.view.chat" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:phone="clr-namespace:microsoft.phone.controls;assembly=microsoft.phone" xmlns:shell="clr-namespace:microsoft.phone.shell;assembly=microsoft.phone" fontfamily="{staticresource phonefontfamilynormal}" fontsize="{staticresource phonefontsizenormal}" foreground="black" loaded="chatpage_onloaded" orientation="portrait" supportedorientations="portrait" shell:systemtray.backgroundcolor="#ff5cbfbb" shell:systemtray.foregroundcolor="white" shell:systemtray.isvisible="true" mc:ignorable="d"> <grid x:name="layoutroot" background="white"> <grid.rowdefinitions> <rowdefinition height="auto" /> <rowdefinition height="*" /> </grid.rowdefinitions> <grid background="#ff5cbfbb"> <grid.columndefinitions> <columndefinition /> <columndefinition width="auto" /> </grid.columndefinitions> <stackpanel> <textblock foreground="white" text="{binding chatuser.name}" /> <textblock foreground="white" text="{binding chattime}" /> </stackpanel> <button grid.column="1" borderthickness="0" command="{binding terminatecommand}" foreground="white"> end chat </button> </grid> <grid x:name="contentpanel" grid.row="1"> <grid.rowdefinitions> <rowdefinition height="*" /> <rowdefinition height="auto" /> </grid.rowdefinitions> <listbox x:name="messagelistbox" horizontalalignment="stretch" verticalalignment="stretch" itemssource="{binding messages}" scrollviewer.verticalscrollbarvisibility="visible" style="{staticresource bottomlistboxstyle}"> </listbox> <stackpanel x:name="messagetextpanel" grid.row="1" background="#ff5cbfbb"> <grid margin="0,0,0,-10"> <textblock fontsize="15" text="{binding userstatus}" /> </grid> <grid> <grid.columndefinitions> <columndefinition /> <columndefinition width="auto" /> </grid.columndefinitions> <textbox></textbox> </grid> </stackpanel> </grid> </grid> </grid> </phone:phoneapplicationpage>
check: scrollviewer not scroll while keyboard active
when normal
when sip open
Comments
Post a Comment