首页 > 解决方案 > 如何访问任何 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。

标签: c#xamluwpuwp-xamlcode-behind

解决方案


我设法通过将 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;
        }
    }
}

推荐阅读