2010-06-04 12 views
5

कारण मैं तनाव 'कोई भी' है, क्योंकि CanContentScroll पूरी तरह से मेरी ScollViewer में काम नहीं कर रहा है। मुझे परिदृश्य समझाएं: मेरे पास ScrollViewer है जिसमें तीन लेबल हैं ListBox प्रत्येक के बाद। ScrollViewer के अंदर मेरे पास यह सामग्री है क्योंकि मैं ListBoxScrollBar रखने के लिए नहीं चाहता, मुझे बस एक "वैश्विक" ScrollBar चाहिए। समस्या यह है कि जब कर्सर ListBox पर ScrollViewer स्क्रॉल नहीं करता है। मैंने CanContentScroll संपत्ति को ScrollViewer, ListBox और ListBoxItem शैली में सफलता के बिना सेट करने की कोशिश की है। क्या अन्य नियंत्रण प्रकार का उपयोग करना चाहिए?ScrollViewer स्क्रॉल कर सकते हैं कैसे जब माउस खत्म हो गया है * किसी * सामग्री

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

उत्तर

11

समस्या यह है कि भले ही बच्चे सूची बंध स्क्रॉल बार दिखाई नहीं है, वे उन में ScrollViewer है उनके टेम्पलेट के अनुसार है: यहाँ मेरी कोड नमूना है। सौभाग्य से यह टेम्पलेट आसानी से संशोधित है। प्रत्येक बच्चे को सूची बॉक्स के लिए ऐसा करते हैं, या बेहतर अभी तक आम शैली में रख:

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

डिफ़ॉल्ट लगभग ItemsPresenter आसपास ScrollViewer रैपिंग के अपवाद के साथ एक ही है।

+0

बात यह है कि मैं प्रति 'लिस्टबॉक्स' प्रति 'स्क्रॉल व्यूअर' नहीं चाहता (मेरे पास 3 है)। मुझे एक 'वैश्विक' 'स्क्रॉलव्यूवर' चाहिए जो अद्वितीय 'लिस्टबॉक्स' की भावना देता है। जो मैंने आपके कोड को समझ लिया उससे मुझे 'लिस्टबॉक्स' प्रति 'स्क्रॉल व्यूअर' दिया जाएगा, है ना? – jpsstavares

+0

नहीं, मेरे कोड में कोई स्क्रॉलव्यूयर नहीं है। यह पूरी बात है। उन में स्क्रॉलिंग से छुटकारा पाने के लिए बच्चों को इसे लागू करें। – repka

+0

आपको संदेह करने के लिए खेद है, मुझे पहले समाधान की कोशिश करनी चाहिए .. यह काम कर रहा है, बहुत बहुत धन्यवाद! – jpsstavares