Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 滚动到WPF中stackpanel中的活动tabcontrol标题_C#_Wpf_Tabcontrol - Fatal编程技术网

C# 滚动到WPF中stackpanel中的活动tabcontrol标题

C# 滚动到WPF中stackpanel中的活动tabcontrol标题,c#,wpf,tabcontrol,C#,Wpf,Tabcontrol,使用下面的代码,我可以创建一个tabcontrol标题的非包装滚动stackpanel。它有可以控制滚动的重复按钮。相反,我希望重复按钮能够控制哪个选项卡处于活动状态,并调整滚动,以便活动选项卡可以滚动到视图中。这可能吗 <TabControl SelectedItem="{Binding ActiveTicketFilterTab, Mode=TwoWay}" Margin="5"

使用下面的代码,我可以创建一个tabcontrol标题的非包装滚动stackpanel。它有可以控制滚动的重复按钮。相反,我希望重复按钮能够控制哪个选项卡处于活动状态,并调整滚动,以便活动选项卡可以滚动到视图中。这可能吗

<TabControl SelectedItem="{Binding ActiveTicketFilterTab, Mode=TwoWay}" 
                                Margin="5"  
                                Grid.Row="1" 
                                BorderBrush="Gray"
                                BorderThickness="2"
                                Style="{StaticResource ResourceKey=somestyle}" 
                                SelectionChanged="selectionchanged" 
                                Name="somename" 
                                Background="#252525"
                                ItemsSource="{Binding someobslist}" 
                                Grid.ColumnSpan="2">
                        <TabControl.Resources>
                            <Style x:Key="TabScrollerRepeatButtonStyle" TargetType="{x:Type RepeatButton}">
                                <Setter Property="Template">
                                    <Setter.Value>
                                        <ControlTemplate>
                                            <Border Background="sc#1, 0.366693377, 0.372125238, 0.6931424">
                                                <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Content="{TemplateBinding ContentControl.Content}"/>
                                            </Border>
                                        </ControlTemplate>
                                    </Setter.Value>
                                </Setter>
                            </Style>
                        </TabControl.Resources>

                        <TabControl.Template>
                            <ControlTemplate TargetType="{x:Type TabControl}">
                                <Grid ClipToBounds="true" SnapsToDevicePixels="true" KeyboardNavigation.TabNavigation="Local">
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition x:Name="ColumnDefinition0"/>
                                        <ColumnDefinition x:Name="ColumnDefinition1" Width="0"/>
                                    </Grid.ColumnDefinitions>
                                    <Grid.RowDefinitions>
                                        <RowDefinition x:Name="RowDefinition0" Height="Auto"/>
                                        <RowDefinition x:Name="RowDefinition1" Height="*"/>
                                    </Grid.RowDefinitions>
                                    <ScrollViewer  Panel.ZIndex="1" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled">
                                        <ScrollViewer.Style>
                                            <Style TargetType="{x:Type ScrollViewer}">
                                                <Setter Property="Template">
                                                    <Setter.Value>
                                                        <ControlTemplate>
                                                            <Grid Margin="0,0,0,0" Grid.Row="0" Grid.Column="0" x:Name="HeaderPanel">
                                                                <Grid.ColumnDefinitions>
                                                                    <ColumnDefinition Width="*"/>
                                                                    <ColumnDefinition Width="50"/>
                                                                </Grid.ColumnDefinitions>
                                                                <Grid.RowDefinitions>
                                                                    <RowDefinition Height="Auto"/>
                                                                </Grid.RowDefinitions>

                                                                <ScrollContentPresenter Grid.Column="0" Content="{TemplateBinding ScrollViewer.Content}" />
                                                                <StackPanel Orientation="Horizontal"  Grid.Column="1">
                                                                    <RepeatButton Style="{StaticResource TabScrollerRepeatButtonStyle}" Content="&lt;" Command="ScrollBar.LineLeftCommand"/>
                                                                    <RepeatButton Style="{StaticResource TabScrollerRepeatButtonStyle}" Content="&gt;" Command="ScrollBar.LineRightCommand"/>
                                                                </StackPanel>
                                                            </Grid>
                                                        </ControlTemplate>
                                                    </Setter.Value>
                                                </Setter>
                                            </Style>
                                        </ScrollViewer.Style>
                                        <StackPanel  x:Name="HeaderPanel" Grid.Column="0" IsItemsHost="true" Margin="2,2,2,0" Grid.Row="0" KeyboardNavigation.TabIndex="1" Panel.ZIndex="1" Orientation="Horizontal"/>
                                    </ScrollViewer>
                                        <Border x:Name="ContentPanel" 
                                            BorderBrush="{TemplateBinding BorderBrush}" 
                                            BorderThickness="{TemplateBinding BorderThickness}" 
                                            Background="{TemplateBinding Background}" 
                                            Grid.Row="1"
                                            Grid.Column="0" 
                                            Margin="2,-2, 0, 13"
                                            KeyboardNavigation.DirectionalNavigation="Contained" 
                                            KeyboardNavigation.TabIndex="2" 
                                            KeyboardNavigation.TabNavigation="Local">
                                        <ContentPresenter x:Name="PART_SelectedContentHost" ContentSource="SelectedContent" Margin="{TemplateBinding Padding}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                                    </Border>
                                </Grid>
                            </ControlTemplate>
                        </TabControl.Template>



                        <TabControl.ItemContainerStyle>
                            <Style TargetType="TabItem" BasedOn="{StaticResource someotherstyle}">
                                <Setter Property="HeaderTemplate">
                                    <Setter.Value>
                                        <DataTemplate>
                                            <Border BorderBrush="{x:Null}" Height="25">
                                                <TextBlock Padding="10"  Name="Title"  VerticalAlignment="Center" TextTrimming="CharacterEllipsis"  HorizontalAlignment="Stretch" Text="{Binding Name}" ToolTip="{Binding Name}" />
                                            </Border>
                                        </DataTemplate>
                                    </Setter.Value>
                                </Setter>
                            </Style>
                        </TabControl.ItemContainerStyle>
                        <TabControl.ContentTemplate>
                            <DataTemplate>
                                <Grid Background="Transparent">
                                    <ListBox    x:Name="ticketView"   
                                                Unloaded="On_Listbox_enter"
                                                ItemsSource="{Binding TicketsView}"
                                                Background="#252525"
                                                Margin="5,5,0,0"
                                                HorizontalContentAlignment="Stretch"
                                                BorderBrush="{x:Null}"
                                                BorderThickness="1" 
                                                Padding="0,0,5,0"
                                                VirtualizingPanel.IsVirtualizing="False"
                                                ScrollViewer.HorizontalScrollBarVisibility="Auto"
                                                ScrollViewer.VerticalScrollBarVisibility="Auto"
                                                ScrollViewer.CanContentScroll="False" 
                                                ItemTemplate="{StaticResource TicketViewTemplate}">
                                        <ListBox.Resources>
                                            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#252525" />
                                            <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="Transparent" />                                           
                                        </ListBox.Resources>
                                    </ListBox>

                                    <StackPanel Grid.Row="0" Margin="328,75"
                                            Visibility="{Binding ExposeTicketSpinner, Converter={StaticResource BoolToVisConverter}}" 
                                            Width="Auto">

                                        <Viewbox Grid.Row="0"
                                             Height="100"
                                             Width="100"
                                             HorizontalAlignment="Stretch" 
                                             VerticalAlignment="Stretch">
                                            <WPFControls:CircularProgressBar HorizontalAlignment="Center" VerticalAlignment="Center" />
                                        </Viewbox>
                                        <Label Foreground="White" FontWeight="Bold"  Margin="0,33"  Content="Loading Tickets..." HorizontalAlignment="Center"></Label>
                                    </StackPanel>
                                </Grid>
                            </DataTemplate>
                        </TabControl.ContentTemplate>
                    </TabControl>

要使您的东西按需要工作,请执行以下操作:

首先

用这个替换你的重复按钮

<RepeatButton Style="{StaticResource TabScrollerRepeatButtonStyle}" Content="&lt;" Command="{Binding MoveLeftCommand}"/>
<RepeatButton Style="{StaticResource TabScrollerRepeatButtonStyle}" Content="&gt;" Command="{Binding MoveRightCommand}"/>
就这样。如果你需要一个
中继命令,我可以把我的递给你。当然可以用你的替换我的

此解决方案现在通过
选项卡items

编辑


这是一个没有导航到TabItem的纯滚动循环器,基于只需替换
滚动条。LineLeftCommand
,当然还有使用您自己的命令和逻辑的LineRightCommand。如果我可以让scrollviewer滚动适当数量的像素,我会这样做,但我所能看到的只是linemove。我认为将cancontentscroll设置为true意味着linemove将是一个完整的选项卡,但它不起作用。我不在工作电脑旁,因此无法测试它,但看起来就像是通过“重复”按钮设置的活动选项卡。如果活动选项卡不在视图中,我希望能够将其滚动到视图中。哦,好的。我不明白。让我来修正一下,明天这是一个tabcontrol中标题的stackpanel,扩展方法看起来像它的listview。我还对代码的去向感到困惑,stackpanel是在tabcontrol模板中指定的,我不知道它是否绑定到视图控制器。这并不重要,扩展方法放在哪里。它与您的
选项卡控件
和“我的答案”中的编辑一起工作。也可以在编辑之前使用我建议的命令。在我的机器上运行良好它不会编译命令,在lambda操作符上它抱怨它需要一个分号。我在别处调用了scrollintocenterofview,由于items控件为null,它在运行时崩溃。
public ICommand MoveLeftCommand => new RelayCommand(x => {
            var currIdx = this.someobslist.IndexOf(this.ActiveTicketFilterTab);
            this.ActiveTicketFilterTab = currIdx == 0 ? this.someobslist[this.someobslist.Count - 1] : this.someobslist[currIdx - 1];
        });

        public ICommand MoveRightCommand => new RelayCommand(x => {
            var currIdx = this.someobslist.IndexOf(this.ActiveTicketFilterTab);
            this.ActiveTicketFilterTab = currIdx == this.someobslist.Count - 1 ? this.someobslist[0] : this.someobslist[currIdx + 1];
        });
private int _scollMoverIdx = 0;
    private TabControl _container;

    private void ScrollViewer_OnLoaded(object sender, RoutedEventArgs e) {
      this._container = (sender as ScrollViewer).TemplatedParent as TabControl;
    }

    public ICommand MoveLeftCommand => new RelayCommand(x => {
      if (this._scollMoverIdx == 0) {
        this._scollMoverIdx = this.someobslist.Count - 1;
        this._container.ScrollToCenterOfView(this.someobslist[_scollMoverIdx]);
      } else {
        _scollMoverIdx--;
        this._container.ScrollToCenterOfView(this.someobslist[_scollMoverIdx]);
      }

    });

    public ICommand MoveRightCommand => new RelayCommand(x => {
      if (this._scollMoverIdx == this.someobslist.Count - 1) {
        this._scollMoverIdx = 0;
        this._container.ScrollToCenterOfView(this.someobslist[_scollMoverIdx]);
      } else {
        _scollMoverIdx++;
        this._container.ScrollToCenterOfView(this.someobslist[_scollMoverIdx]);
      }
    });