2017-03-01 9 views
0

XAMLにItemsControlが定義されています。WPF ItemsControlは最初のアイテムのみを表示します

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"></RowDefinition> 
     <RowDefinition Height="Auto"></RowDefinition> 
     <RowDefinition Height="*"></RowDefinition> 
     <RowDefinition Height="*"></RowDefinition> 
    </Grid.RowDefinitions> 

    ... 

    <StackPanel Orientation="Horizontal" Grid.Row="2" Margin="5" MaxHeight="160"> 

     <ItemsControl Name="FilterItemsControl" ItemsSource="{Binding Filters}" > 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <GroupBox Header="{Binding Path=Key}" Margin="10,0,0,5" MaxWidth="150"> 
         <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"> 
          <ItemsControl ItemsSource="{Binding Path=Value}" > 
           <ItemsControl.ItemTemplate> 
            <DataTemplate> 
             <CheckBox Content="{Binding Path=Name}" IsChecked="{Binding Path=IsChecked}" Margin="1"/> 
            </DataTemplate> 
           </ItemsControl.ItemTemplate> 
          </ItemsControl> 
         </ScrollViewer> 
        </GroupBox> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
     </ItemsControl> 

    </StackPanel> 

    ... 

</Grid> 

のViewModel:CheckableItemため

public Dictionary<string, ObservableCollection<CheckableItem>> Filters 
    { 
     get 
     { 
      return filters; 
     } 
     set 
     { 
      filters = value; 
      OnPropertyChanged("Filters"); 
     } 
    } 

そして単純なクラス:

public class CheckableItem 
{ 
    private long id; 
    private bool isChecked; 
    private string name; 

    public long Id 
    { 
     get { return id; } 
     set { id = value; } 
    } 

    public string Name 
    { 
     get { return name; } 
     set { name = value; } 
    } 

    public bool IsChecked 
    { 
     get { return isChecked; } 
     set { isChecked = value; } 
    } 
} 

フィルタ辞書を適切にViewModelに充填されています。また、Filters.Countは1より大きい。 辞書からすべてのKeyValuePairを横向きに表示したいが、辞書の最初の項目だけが表示されますが、なぜですか?

また、水平方向のコードは大丈夫ですか?

答えて

2

StackPanel内部ScrollViewerStackPanel対策無限の空間とその子として悪い考えです置く:あなたはItemsControlが水平のアイテムをレイアウトする場合

Horizontal scroll for stackpanel doesn't work

は、あなたがそのItemsPanelに設定する必要があります水平StackPanel

これを試してみてください:

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"></RowDefinition> 
     <RowDefinition Height="Auto"></RowDefinition> 
     <RowDefinition Height="*"></RowDefinition> 
     <RowDefinition Height="*"></RowDefinition> 
    </Grid.RowDefinitions> 

    <ScrollViewer Grid.Row="2" Margin="5" ScrollViewer.HorizontalScrollBarVisibility="Auto"> 
     <ItemsControl Name="FilterItemsControl" ItemsSource="{Binding Filters}"> 
      <ItemsControl.ItemsPanel> 
       <ItemsPanelTemplate> 
        <StackPanel Orientation="Horizontal" /> 
       </ItemsPanelTemplate> 
      </ItemsControl.ItemsPanel> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <GroupBox Header="{Binding Path=Key}" Margin="10,0,0,5" MaxWidth="150"> 
         <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"> 
          <ItemsControl ItemsSource="{Binding Path=Value}" > 
           <ItemsControl.ItemTemplate> 
            <DataTemplate> 
             <CheckBox Content="{Binding Path=Name}" IsChecked="{Binding Path=IsChecked}" Margin="1"/> 
            </DataTemplate> 
           </ItemsControl.ItemTemplate> 
          </ItemsControl> 
         </ScrollViewer> 
        </GroupBox> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
     </ItemsControl> 
    </ScrollViewer> 
</Grid> 
+0

はあなたに男をありがとうございました。ほんとうにありがとう。 – gzsun

関連する問題