2014-01-28 45 views
0

我有一個尺寸爲400 x 150的網格,我想在其中添加一個列表框。嘗試在網格內水平設置列表框

列表框由包含TextBlock的網格組成。

<Grid Width="400" Height="150"> 
    <ListBox x:Name="list" > 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <Grid Width = "80"> 
         <Border BorderBrush="Black" HorizontalAlignment="Right" /> 
         <TextBlock Foreground="Black" Text="{Binding name}" /> 
        </Grid> 
       </StackPanel> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 
</Grid> 

但是該列表是垂直顯示的。

我試過使用VirtualizingStackPanel,但問題是網格的邊框顯示不正確。

如何使此列表看起來水平,並且包含文本塊的網格的邊界可見?

回答

1

U可以使用這樣有列表框的水平的ScrollViewer

<Grid Width="400" Height="150"> 
<ListBox x:Name="list" ScrollViewer.HorizontalScrollBarVisibility="Visible" ScrollViewer.VerticalScrollBarVisibility="Hidden" > 
     <ListBox.ItemsPanel> 
      <ItemsPanelTemplate > 
       <StackPanel Orientation="Horizontal"></StackPanel> 
      </ItemsPanelTemplate> 
     </ListBox.ItemsPanel> 
     <ListBox.ItemTemplate> 
      <DataTemplate > 
       <StackPanel Orientation="Horizontal"> 
       <Grid Width = "80"> 
        <Border BorderBrush="Black" HorizontalAlignment="Right" /> 
        <TextBlock Foreground="Black" Text="{Binding name}" /> 
       </Grid> 
      </StackPanel> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 
</Grid> 

除此之外,你必須同時調整列表框和網格的高度和寬度根據您的需求。

0

我想你可以使用ItemsPanel來改變listBox的方向。邊界厚度也是必要的。希望我能幫助你。謝謝!

<Grid Width="400" Height="150"> 
    <ListBox x:Name="list" > 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <Grid Width = "80"> 
     <!-- if you want to use border to separate items, HorizontalAlignment="Right"; 
      and if use it as container, HorizontalAlignment="Stretch" --> 
         <Border BorderBrush="Black" BorderThickness="1" HorizontalAlignment="Right"/> 
         <TextBlock Foreground="Black" Text="{Binding name}" /> 
        </Grid> 
       </StackPanel> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
     <ListBox.ItemsPanel> 
      <ItemsPanelTemplate> 
       <StackPanel Orientation="Horizontal"/> 
      </ItemsPanelTemplate> 
     </ListBox.ItemsPanel> 
    </ListBox> 
</Grid> 
0

我認爲克里斯是正確的線條,但我相信你需要在ItemsPanel模板中的內容主持人。

<Grid Width="400" Height="150"> 
<ListBox x:Name="list" > 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <Grid Width = "80"> 
    <!-- if you want to use border to separate items, HorizontalAlignment="Right"; 
     and if use it as container, HorizontalAlignment="Stretch" --> 
        <Border BorderBrush="Black" BorderThickness="1" HorizontalAlignment="Right"> 
         <TextBlock Foreground="Black" Text="{Binding name}" /> 
     </Border> 
       </Grid> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel Orientation="Horizontal"> 
     <ContentPresenter/> 
    </StackPanel> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
</ListBox> 

0

使用此代碼,它可以幫助你:

<Grid Width="400" Height="150"> 
     <ListBox x:Name="list" > 
      <ListBox.ItemsPanel> 
       <ItemsPanelTemplate> 
        <StackPanel Orientation="Horizontal"/> 
       </ItemsPanelTemplate> 
       </ListBox.ItemsPanel> 
      <ListBox.ItemTemplate> 
       <DataTemplate>    
         <Grid Width = "80"> 
          <Border BorderBrush="Black" HorizontalAlignment="Right" /> 
          <TextBlock Foreground="Black" Text="{Binding name}" /> 
         </Grid>     
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 
    </Grid> 
+0

使用這一個,它會幫助 –

0

列表框的使用ItemsPanel屬性。試試這爲我的工作。

<Grid Width="400" Height="150"> 
    <ListBox x:Name="list" > 
     <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel Orientation="Horizontal"> 
     </ItemsPanelTemplate> 
     </ListBox.ItemsPanel> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <Grid Width = "80"> 
         <Border BorderBrush="Black" HorizontalAlignment="Right" /> 
         <TextBlock Foreground="Black" Text="{Binding name}" /> 
        </Grid> 
       </StackPanel> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 
</Grid> 
1

如果我是正確的,你不想要一個StackPanelDataTemplate,你真正想要的ListBox內水平放置的物品。您需要更改ListBox.ItemsPanel,並且您需要禁用垂直滾動並在ListBox中啓用水平滾動。以下是完整的XAML:

<ListBox ScrollViewer.VerticalScrollBarVisibility="Disabled" 
     ScrollViewer.HorizontalScrollBarVisibility="Auto"> 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <VirtualizingStackPanel Orientation="Horizontal" 
            CanVerticallyScroll="False" 
            CanHorizontallyScroll="True"/> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 

</ListBox>