簡體   English   中英

使活動標簽在scrollviewer中可見

[英]Make active tab visible in scrollviewer

我的tabcontrol中有很多選項卡,因此我使用了想為tabcontrol創建可滾動選項卡的解決方案。 問題是在我的窗口中,我有按鈕上一個-下一個,可更改活動選項卡。 因此,我想使scrollviewer自動移動到活動選項卡。 可以使用FrameworkElement BringIntoView()方法進行制作。 但是我該如何實施呢?

在這里,我通過創建附加行為( Attached Properties )解決了該問題

如果您的模板類似於您發布的鏈接中的模板

通過將附加屬性ScrollHelper.SelectScroll綁定到選項卡項的IsSelected ,添加以下樣式

    <TabControl>
        <TabControl.Resources>
            <Style TargetType="TabItem" xmlns:l="clr-namespace:CSharpWPF">
                <Setter Property="l:ScrollHelper.SelectScroll"
                        Value="{Binding IsSelected,RelativeSource={RelativeSource Self}}" />
            </Style>
        </TabControl.Resources>
        ...
    </TabControl>

行為班

namespace CSharpWPF
{
    class ScrollHelper : DependencyObject
    {
        public static bool GetSelectScroll(DependencyObject obj)
        {
            return (bool)obj.GetValue(SelectScrollProperty);
        }

        public static void SetSelectScroll(DependencyObject obj, bool value)
        {
            obj.SetValue(SelectScrollProperty, value);
        }

        // Using a DependencyProperty as the backing store for SelectScroll.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty SelectScrollProperty =
            DependencyProperty.RegisterAttached("SelectScroll", typeof(bool), typeof(ScrollHelper), new PropertyMetadata(false, OnSelectScroll));


        private static void OnSelectScroll(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            TabItem tab = d as TabItem;
            if ((bool)e.NewValue)
            {
                tab.BringIntoView();
            }
        } 
    }
}

更改屬性后,它將調用BringIntoView()方法,該方法會將選項卡拉入視圖,因此scrollviewer將滾動到選項卡

您可以根據自己的喜好選擇重命名屬性或類,我只是選擇了一個隨機名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM