[英]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.