代码之家  ›  专栏  ›  技术社区  ›  jpsstavares

当鼠标悬停在*任何*内容上时,如何使ScrollViewer滚动

  •  5
  • jpsstavares  · 技术社区  · 14 年前

    我强调“任何”的原因是 CanContentScroll 在我的 ScollViewer . 我来解释一下这个场景: 我有一个 ScrollViewer 有三个标签后面跟着一个 ListBox 每一个。我之所以在 滚动条 因为我不想要每一个 列表框 有一个 ScrollBar ,我只想要一个“全球” 滚动条 . 问题是当光标位于 列表框 这个 滚动条 不滚动。我已经试过了 CanContentScroll(CanContentScroll) 属性在ScrollViewer、ListBox和ListBoxItem样式中为true,但未成功。我是否应该使用其他控件类型? 这是我的代码示例:

    <UserControl x:Class="Telbit.TeStudio.View.Controls.TestStepsView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:my="clr-namespace:Telbit.TeStudio.View.Controls">
    
    <UserControl.Resources>
        <DataTemplate DataType="{x:Type my:TestStepsStepViewModel}">
            <my:TestStepsStepView HorizontalAlignment="Stretch"/>
        </DataTemplate>
    
        <Style x:Key="StepItemStyle" TargetType="{x:Type ListBoxItem}">
            <Setter Property="SnapsToDevicePixels" Value="true"/>
            <Setter Property="OverridesDefaultStyle" Value="true"/>
            <Setter Property="IsSelected" Value="{Binding Mode=TwoWay, Path=IsSelected}"/>
            <Setter Property="ScrollViewer.CanContentScroll" Value="True"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ListBoxItem">
                        <Border Name="Border" SnapsToDevicePixels="true" Background="Transparent" BorderThickness="0" Padding="1">
                            <ContentPresenter/>
                        </Border>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsSelected" Value="true">
                                <Setter TargetName="Border" Property="Background" Value="#40a0f5ff"/>
                            </Trigger>
                            <Trigger Property="IsKeyboardFocusWithin" Value="True">
                                <Setter Property="IsSelected" Value="True" />
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </UserControl.Resources>
    
    <UserControl.Background>
        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
            <GradientStop Color="#FFF2F2F2"/>
            <GradientStop Color="Gainsboro" Offset="1"/>
        </LinearGradientBrush>
    </UserControl.Background>
    
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="30"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
    
        <HeaderedContentControl Grid.Row="0" >
            <HeaderedContentControl.Header>
                <Grid Background="#e8f2f8">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="30"/>
                        <ColumnDefinition MinWidth="200" Width="*" />
                        <ColumnDefinition Width="75"/>
                        <ColumnDefinition Width="60"/>
                        <ColumnDefinition Width="60"/>
                        <ColumnDefinition Width="60"/>
                        <ColumnDefinition Width="60"/>
                        <ColumnDefinition Width="120"/>
                        <ColumnDefinition Width="130"/>
                    </Grid.ColumnDefinitions>
    
                    <Label Grid.Column="0" Content="#" BorderBrush="#70add4" BorderThickness="2 2 0 2"/>
                    <Label Grid.Column="1"
                           Content="Folder\Name" 
                           BorderBrush="#70add4" BorderThickness="0 2 0 2"/>
                    <Label Grid.Column="2" Content="Type" BorderBrush="#70add4" BorderThickness="0 2 0 2" Margin="-20 0 0 0"/>
                    <Label Grid.Column="3" Content="Auto Start" BorderBrush="#70add4" BorderThickness="0 2 0 2" Margin="-20 0 0 0"/>
                    <Label Grid.Column="4" Content="Run After" BorderBrush="#70add4" BorderThickness="0 2 0 2" Margin="-20 0 0 0"/>
                    <Label Grid.Column="5" Content="Stop After" BorderBrush="#70add4" BorderThickness="0 2 0 2" Margin="-20 0 0 0"/>
                    <Label Grid.Column="6" Content="Delay (s)" BorderBrush="#70add4" BorderThickness="0 2 0 2" Margin="-20 0 0 0"/>
                    <Label Grid.Column="7" Content="Timestamp" BorderBrush="#70add4" BorderThickness="0 2 0 2" Margin="-20 0 0 0"/>
                    <Label Grid.Column="8" Content="Edited by" BorderBrush="#70add4" BorderThickness="0 2 2 2" Margin="-20 0 0 0"/>
                </Grid>
            </HeaderedContentControl.Header>
        </HeaderedContentControl>
        <ScrollViewer VerticalScrollBarVisibility="Auto" Grid.Row="1" VerticalAlignment="Top" CanContentScroll="True">
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="30"/>
                    <RowDefinition Height="3*"/>
                    <RowDefinition Height="30"/>
                    <RowDefinition Height="3*"/>
                    <RowDefinition Height="30"/>
                    <RowDefinition Height="3*"/>
                </Grid.RowDefinitions>
    
                <Label Name="lblSetup" Grid.Row="0" 
                       VerticalContentAlignment="Center"
                       BorderBrush="DarkGray" BorderThickness="0 0 0 1"
                       TextBlock.FontSize="10pt" TextBlock.FontWeight="Bold" TextBlock.Foreground="#949494"
                       Content="Setup" AllowDrop="True"/>
                <ListBox Name="itmCtrlSetupSteps" Grid.Row="1"
                         BorderThickness="0" Background="Transparent"
                         ItemsSource="{Binding SetupSteps}" SelectionMode="Single"
                         HorizontalContentAlignment="Stretch" 
                         ItemContainerStyle="{StaticResource StepItemStyle}"
                         SelectionChanged="manageStep_SelectionChanged"
                         ScrollViewer.CanContentScroll="True"
                         />
    
                <Label Name="lblTest" Grid.Row="2" 
                       VerticalContentAlignment="Center"
                       BorderBrush="DarkGray" BorderThickness="0 0 0 1"
                       TextBlock.FontSize="10pt" TextBlock.FontWeight="Bold" TextBlock.Foreground="#949494"
                       Content="Test" AllowDrop="True"/>
                <ListBox Name="itmCtrlTestSteps" Grid.Row="3"
                         BorderThickness="0" Background="Transparent"
                         ItemsSource="{Binding TestSteps}" SelectionMode="Single"
                         HorizontalContentAlignment="Stretch"
                         ItemContainerStyle="{StaticResource StepItemStyle}"
                         SelectionChanged="manageStep_SelectionChanged"
                         />
    
                <Label Name="lblTearDown" Grid.Row="4" 
                       VerticalContentAlignment="Center"
                       BorderBrush="DarkGray" BorderThickness="0 0 0 1"
                       TextBlock.FontSize="10pt" TextBlock.FontWeight="Bold" TextBlock.Foreground="#949494"
                       Content="Tear Down" AllowDrop="True"/>
                <ListBox Name="itmCtrlTearDownSteps" Grid.Row="5"
                         BorderThickness="0" Background="Transparent"
                         ItemsSource="{Binding TearDownSteps}" SelectionMode="Single"
                         HorizontalContentAlignment="Stretch"
                         ItemContainerStyle="{StaticResource StepItemStyle}"
                         SelectionChanged="manageStep_SelectionChanged"
                         />
            </Grid>
        </ScrollViewer>
    </Grid>
    </UserControl>
    
    1 回复  |  直到 14 年前
        1
  •  11
  •   repka    14 年前

    问题是,即使子列表框没有可见的滚动条,它们也有 ScrollViewer 根据他们的模板。幸运的是,这个模板很容易修改。为每个子列表框执行此操作,或者最好将其设置为通用样式:

    <ListBox.Template>
        <ControlTemplate TargetType="ListBox">
            <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderBrush}">
                <ItemsPresenter/>
            </Border>
        </ControlTemplate>
    </ListBox.Template>
    

    除了 滚动条 缠绕 ItemsPresenter .