如何访问任何 TwoPaneView 的滚动查看器
How to access any of the TwoPaneView's ScrollViewers
在一个项目中,我实现了 TwoPaneView 如下:
<TwoPaneView x:Name="LibraryTwoPaneView">
<TwoPaneView.Pane1>
<Grid>
<-- Grid content -->
</Grid>
</TwoPaneView.Pane1>
<TwoPaneView.Pane2>
<-- Pane content -->
</TwoPaneView.Pane2>
</TwoPaneView>
我的问题是,导航到库总是会重置 ScrollViewer 的位置。我习惯在导航到元素时设置 ScrollViewer 偏移量,但我需要访问 ScrollViewer。
请告诉我如何访问 Pane1ScrollViewer。
我设法通过将 TwoPaneView class 扩展为控件来解决我的问题。这样我就可以使用 GetTemplateChild 方法获取 Pane1ScrollViewer 的实例并对其进行操作。
虽然该解决方案符合我的需要,如果您认为更合适,请提供其他方式。
using Windows.UI.Xaml.Controls;
namespace WacomNotesUwp.Controls
{
public class MyTwoPaneView : TwoPaneView
{
private ScrollViewer _pane1ScrollViewer;
public MyTwoPaneView()
{
this.DefaultStyleKey = typeof(MyTwoPaneView);
}
public double Pane1VerticalOffset
{
get
{
if (_pane1ScrollViewer == null)
{
return 0;
}
return _pane1ScrollViewer.VerticalOffset;
}
set
{
if (_pane1ScrollViewer == null)
{
return;
}
_pane1ScrollViewer.ChangeView(_pane1ScrollViewer.HorizontalOffset, value, _pane1ScrollViewer.ZoomFactor);
}
}
protected override void OnApplyTemplate()
{
base.OnApplyTemplate();
_pane1ScrollViewer = GetTemplateChild("PART_Pane1ScrollViewer") as ScrollViewer;
}
}
}
在一个项目中,我实现了 TwoPaneView 如下:
<TwoPaneView x:Name="LibraryTwoPaneView">
<TwoPaneView.Pane1>
<Grid>
<-- Grid content -->
</Grid>
</TwoPaneView.Pane1>
<TwoPaneView.Pane2>
<-- Pane content -->
</TwoPaneView.Pane2>
</TwoPaneView>
我的问题是,导航到库总是会重置 ScrollViewer 的位置。我习惯在导航到元素时设置 ScrollViewer 偏移量,但我需要访问 ScrollViewer。
请告诉我如何访问 Pane1ScrollViewer。
我设法通过将 TwoPaneView class 扩展为控件来解决我的问题。这样我就可以使用 GetTemplateChild 方法获取 Pane1ScrollViewer 的实例并对其进行操作。
虽然该解决方案符合我的需要,如果您认为更合适,请提供其他方式。
using Windows.UI.Xaml.Controls;
namespace WacomNotesUwp.Controls
{
public class MyTwoPaneView : TwoPaneView
{
private ScrollViewer _pane1ScrollViewer;
public MyTwoPaneView()
{
this.DefaultStyleKey = typeof(MyTwoPaneView);
}
public double Pane1VerticalOffset
{
get
{
if (_pane1ScrollViewer == null)
{
return 0;
}
return _pane1ScrollViewer.VerticalOffset;
}
set
{
if (_pane1ScrollViewer == null)
{
return;
}
_pane1ScrollViewer.ChangeView(_pane1ScrollViewer.HorizontalOffset, value, _pane1ScrollViewer.ZoomFactor);
}
}
protected override void OnApplyTemplate()
{
base.OnApplyTemplate();
_pane1ScrollViewer = GetTemplateChild("PART_Pane1ScrollViewer") as ScrollViewer;
}
}
}