2012-03-16 40 views
1

當用itemControl模板替換StackPanel時突然滾動不再正常工作。滾動查看器在將堆棧面板轉換爲ItemsControl時出現問題

老:

<ScrollViewer x:Name="HorizontalScroller" 
      Grid.Column="1" 
      VerticalScrollBarVisibility="Disabled" 
      HorizontalScrollBarVisibility="Hidden" 
      CanContentScroll="True" Margin="2.4,0,1.2,0"> 

      <StackPanel x:Name="spHorizontal" Orientation="Horizontal" UseLayoutRounding="False" 
         ScrollViewer.VerticalScrollBarVisibility="Disabled" Width="862.4"/>    
     </ScrollViewer> 

新:

<ScrollViewer x:Name="HorizontalScroller" Grid.Column="1" VerticalScrollBarVisibility="Disabled" 
      HorizontalScrollBarVisibility="Hidden" CanContentScroll="True" Margin="2.4,0,1.2,0" > 

      <!---RegBtns verwijst naar de ObservableCollection die alle registration buttons bevat--> 
      <ItemsControl Name="ItemControlRegistration" ItemsSource="{Binding ElementName=Window, Path=RegBtns}" Width="834.4"> 
        <ItemsControl.ItemsPanel> 
         <ItemsPanelTemplate> 
         <StackPanel x:Name="spHorizontal" Orientation="Horizontal" UseLayoutRounding="False" ScrollViewer.VerticalScrollBarVisibility="Disabled" 
            Width="834,4" /> 
        </ItemsPanelTemplate> 
        </ItemsControl.ItemsPanel>      
        <ItemsControl.ItemTemplate> 
         <DataTemplate> 
          <!--template custom style button: --> 
         <Button x:Name="RegistrationTestButton" Content="TEST" HorizontalAlignment="Left" Height="73" Width="151" 
           Margin="10,0,5,0" Style="{DynamicResource ButtonStyleRegistration}" 
           Click="RegistrationTestButton_Click">        
         </Button> 
        </DataTemplate> 
        </ItemsControl.ItemTemplate> 
       </ItemsControl>    
     </ScrollViewer> 

問題是,它並不能完全顯示的按鈕。從1-5的含義瀏覽並按右鍵不直接顯示2-6。 換句話說,如果我按右鍵我想一次看到完整的按鈕nr 6。現在它基本上向右(或向左)緩慢滾動,緩慢出現部分按鈕。 當我按下我想要下一個按鈕即時顯示。

究竟發生了什麼這些突然的變化?

問候。

回答

0

爲什麼不把scrollViewer放入ItemsControl的模板中?我的意思是......像下面這樣

<ItemsControl Name="ItemControlRegistration" ItemsSource="{Binding ElementName=Window, Path=RegBtns}" Width="834.4"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <ScrollViewer x:Name="HorizontalScroller" Grid.Column="1" VerticalScrollBarVisibility="Disabled" 
        HorizontalScrollBarVisibility="Hidden" CanContentScroll="True" Margin="2.4,0,1.2,0" > 
        <StackPanel x:Name="spHorizontal" Orientation="Horizontal" UseLayoutRounding="False" ScrollViewer.VerticalScrollBarVisibility="Disabled" 
           Width="834,4" /> 
       </ScrollViewer> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel>      
       <ItemsControl.ItemTemplate> 
        <DataTemplate> 
         <!--template custom style button: --> 
        <Button x:Name="RegistrationTestButton" Content="TEST" HorizontalAlignment="Left" Height="73" Width="151" 
          Margin="10,0,5,0" Style="{DynamicResource ButtonStyleRegistration}" 
          Click="RegistrationTestButton_Click">        
        </Button> 
       </DataTemplate> 
       </ItemsControl.ItemTemplate> 
</ItemsControl>    
+0

似乎沒有工作。此外,我必須能夠從後面的代碼訪問此scrollviewer。 – Rakr 2012-03-16 14:41:58

+1

這就是我所做的,但有困難現在從代碼隱藏存取scrollviewer。我需要這個將LineLeft和LineRight屬性設置爲某些按鈕。 「ItemsPanelTemplate的VisualTree必須包含一個Panel.'System.Windows.Controls.ScrollViewer'不是一個Panel。wpf」 – Rakr 2012-03-16 14:54:09

+0

只是用 pamidur 2012-03-16 15:10:01