2010-06-04 16 views
5

La razón por la que recalco 'cualquiera' es porque CanContentScroll no funciona completamente en mi ScollViewer. Déjenme explicar el escenario: Tengo un ScrollViewer que tiene tres etiquetas seguidas por un ListBox cada uno. La razón por la que tengo este contenido dentro del ScrollViewer es porque no quiero que cada ListBox tenga un ScrollBar, solo quiero un "global" ScrollBar. El problema es que cuando el cursor está sobre el ListBox, el ScrollViewer no se desplaza. Intenté establecer la propiedad CanContentScroll en true en ScrollViewer, ListBox y en el estilo ListBoxItem, sin éxito. ¿Hay algún otro tipo de Control que deba usar? Aquí está mi ejemplo de código:Cómo hacer que ScrollViewer se desplace cuando el mouse está sobre * cualquier * contenido

<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> 

Respuesta

11

El problema es que a pesar de que la lista de niño Boxen no tienen barras de desplazamiento visibles, tienen ScrollViewer en ellos en función de su plantilla. Afortunadamente esta plantilla es fácilmente modificable. Haga esto para cada cuadro de lista de elementos secundarios, o mejor aún, ponerlo en un estilo común:

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

El valor por defecto es casi lo mismo con la excepción de ScrollViewer envoltura alrededor de ItemsPresenter.

+0

El problema es que no quiero un 'ScrollViewer' por' ListBox' (tengo 3). Quiero un 'ScrollViewer' global que dé la sensación de un' ListBox' único. Por lo que entendí, tu código me dará un 'ScrollViewer' por' ListBox', ¿verdad? – jpsstavares

+0

No, no hay ScrollViewer en mi código. Ese es todo el punto. Aplica esto a los niños para que se deshagan del desplazamiento en ellos. – repka

+0

Lamento dudar de ti, debería haber intentado la solución primero ... ¡Está funcionando, muchas gracias! – jpsstavares

Cuestiones relacionadas