c# - 如何访问任何 TwoPaneView 的 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 类扩展为控件来解决我的问题。这样我就可以使用 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;
}
}
}
推荐阅读
- ansible - 如何为机器上的每个用户运行剧本
- raspberry-pi - MinIO mc 客户端错误:拨号 tcp:在 192.168.2.254:53 上查找 minio:没有这样的主机
- python - 'MyClass' 对象没有属性 'type' ,在类中加载库时出现问题
- interrupt - 带有假 ATmega328 的 Arduino Nano?
- macos - 是否有任何核心转储设置仅可用于 Mac 上的进程的最新设置?
- laravel - 许多记录上碳的正确时区
- c# - 在网络核心运行时从字符串执行代码?
- javascript - ("[object Promise]") 不能序列化为 JSON
- swiftui - 如何使用matchedGeometryEffect和视图缩放
- python-3.x - Websocketapps 在参数值更改时添加另一个查询