2016-04-12 9 views
0

カスタムUserControlsで塗りつぶしたStackPanelがあります。このスタックパネルの下部に水平スクロールバーを追加して、ユーザーがより多くのユーザーコントロールを表示するためにスクロールを左右に表示できるようにしたいと考えています。StackPanel上のHorizo​​ntalScrollBar

ItemsPanelのサイズがScrollViewerによって決定されるという意味で、私が今使っているのは間違っているようです。つまり、縦スクロールバーを調整して縮小すると、スタックパネルが縮小され、それを表示するにはスクロールダウンする必要があります。私はItemsControlの中にScrollViewerを入れてみましたが、うまくいきません。

<Window x:Name="MainWindow" x:Class="Test.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Test Generator" Height="464.5" Width="950"> 
<Grid> 
    <Menu DockPanel.Dock="Top" Height="22" VerticalAlignment="Top"> 
     <MenuItem Header="_File"> 
      <MenuItem Header="New"/> 
      <MenuItem Header="Open Template"/> 
      <MenuItem Header="Save Template"/> 
      <Separator /> 
      <MenuItem Header="_Exit"/> 
     </MenuItem> 
    </Menu> 
    <Button Content="Load Template" HorizontalAlignment="Left" Margin="35,36,0,0" VerticalAlignment="Top" Width="98"/> 
    <Button Content="Add Col" HorizontalAlignment="Right" Margin="0,36,35,0" VerticalAlignment="Top" Width="75"/> 
    <Button x:Name="Generate_Data" Content="Generate Data Window" Height="22" Margin="0,36,0,0" VerticalAlignment="Top" Width="160" Click="Generate_Data_Click" HorizontalAlignment="Center"/> 
     <ScrollViewer HorizontalScrollBarVisibility="Visible" Margin="0,197,0,0"> 
      <ItemsControl Name="userControlContainer" Margin="10,150,10,10" ItemsSource="{Binding MyCollection}"> 
       <ItemsControl.ItemsPanel> 
        <ItemsPanelTemplate> 
         <StackPanel Orientation="Horizontal"/> 
        </ItemsPanelTemplate> 
       </ItemsControl.ItemsPanel> 
       <ItemsControl.ItemTemplate> 
        <DataTemplate> 
         <ContentControl Content="{Binding}" /> 
        </DataTemplate> 
       </ItemsControl.ItemTemplate> 
      </ItemsControl> 
     </ScrollViewer> 
</Grid> 

答えて

3

は、あなたが持っている外ScrollViewerを外し、ItemsControl自体のControlTemplateに追加します。

<ItemsControl Name="userControlContainer" Margin="10,150,10,10" ItemsSource="{Binding MyCollection}"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel Orientation="Horizontal"/> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.Template> 
     <ControlTemplate> 
      <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled"> 
       <ItemsPresenter SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}"/> 
      </ScrollViewer> 
     </ControlTemplate> 
    </ItemsControl.Template> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <ContentControl Content="{Binding}" /> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 
+0

これは私が必要とするように、きれいに機能します。オンラインのどこかでこの情報を検索した場合、この情報を入手した場所を尋ねてもよろしいですか? –

+1

カスタムItemsControlで作業を始めたときも同様の問題がありましたが、これは私が思いついたメソッドでした。私はデフォルトのItemsControlテンプレートを見て、組み込みのScrollがどのように働いているかを見ました。私はどこで覚えていないが、私はこれをソースとして使用したと信じている:https://msdn.microsoft.com/en-us/library/system.windows.controls.itemscontrol.itemcontainerstyle(v=vs.110)。 aspx –

0

<ScrollViewer/>を削除し、<StackPanel ScrollViewer.HorizontalScrollBarVisibility="Auto" />の添付プロパティを設定してください。

完全な例:

<ItemsControl Name="userControlContainer" Margin="10,150,10,10" ItemsSource="{Binding MyCollection}"> 
      <ItemsControl.ItemsPanel> 
       <ItemsPanelTemplate> 
        <StackPanel Orientation="Horizontal" ScrollViewer.HorizontalScrollBarVisibility="Auto"/> 
       </ItemsPanelTemplate> 
      </ItemsControl.ItemsPanel> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <ContentControl Content="{Binding}" /> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
</ItemsControl> 
+0

これは機能しません。私はAutoの代わりにVisibleを試しました。 –

+0

@TalenKylonあなたが望むものより多くのクリートを書くことができますか? ''に置かれたアイテムのサイズを変更しますか? – StepUp

+0

必ずしもサイズを変更したくないので、StackPanelのアイテム数がアプリケーションのビューを超えた場合に、より多くのものを見ることができる水平スクロールバーが必要です。次に、左または右にスクロールして詳細を表示します。 –