2012-01-09 43 views
-1

我想顯示具有詳細程度的數據,所以我使用TreeView,但每個細節都很短,所以我想使用WrapPanel(水平)來爲每行提供很多細節。在TreeView中使用WrapPanel

是這樣的:

  • 這是一個未膨脹產品

  • 這是一個擴展的項的頭部

    信息1信息2信息3信息4

    信息5 Info 6 Info 7

所以我試着定義TreeViewItem的模板,但我無法得到包裝wrappanel。當info的數據模板寬度爲100,TreeView 爲500時,我每行只有一個信息。我嘗試設置WrapPanel,ItemsWidth的寬度,但是沒有成功。

有什麼想法?

編輯:我終於得到這個與'更簡單'的解決方案。仍然看起來我們 必須定義WrapPanel的寬度,這使得解決方案不那麼通用。

這是我來到了解決方案:只需定義,在風格,ItemsPanel在 樹型視圖中使用:

<Style TargetType="TreeViewItem"> 
    <Setter Property="ItemsPanel"> 
     <Setter.Value> 
       <ItemsPanelTemplate> 
       <WrapPanel Orientation="Horizontal"  
          Width="520" 
          HorizontalAlignment="Stretch" 
          Margin="0" 
          ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
          IsItemsHost="True" 
        /> 
       </ItemsPanelTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

,我還讓不工作的解決方案在這裏,爲了完整起見。 (爲什麼不它的工作???)

<Style TargetType="TreeViewItem"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="TreeViewItem"> 
       <Grid Margin="2" Width="500"> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="Auto" /> 
         <RowDefinition Height="Auto" /> 
        </Grid.RowDefinitions> 

        <ContentPresenter Name="PART_Header"     
             ContentSource="Header" 
             HorizontalAlignment="Center" 
             VerticalAlignment="Center" /> 

    !!!! this is the wrapanel not wrapping 
        <ListBox  Name="AllItems"  Grid.Row="1"  > 
         <ListBox.ItemsPanel> 
          <ItemsPanelTemplate> 
           <WrapPanel Orientation="Horizontal" /> 
          </ItemsPanelTemplate> 
         </ListBox.ItemsPanel> 
         <ItemsPresenter /> 
        </ListBox> 

       </Grid> 

       <ControlTemplate.Triggers> 
        <Trigger Property="IsExpanded" Value="False"> 
         <Setter 
             TargetName="AllItems" 
             Property="Visibility"      
              Value="Collapsed" /> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
+0

你看到WrapPanel了嗎?它有滾動條嗎?也許嘗試禁用它們。 – Shimmy 2012-01-09 03:04:57

+0

是的,事實上,正如我說的那樣,除了它顯示的項目就好像面板是一個垂直StackPanel。它是水平居中,無論我改變。是的,它試圖設置水平滾動查看器禁用,並沒有奏效。 – GameAlchemist 2012-01-09 15:54:21

+0

如果WrapPanel更寬,會發生什麼情況?嘗試設置一個邊框,並確保它確實是垂直的,或者只是如上所述的可用空間 – Shimmy 2012-01-09 16:04:33

回答

1

編輯:我終於拿到了這一個「簡單」的解決方案工作。仍然看起來我們 必須定義WrapPanel的寬度,這使得解決方案不那麼通用。 (也許是一個綁定的寬度(但哪個?)會解決這個問題)

這是我來到了解決方案:只需定義,在風格,ItemsPanel用在 樹型視圖:

<Style TargetType="TreeViewItem"> 
    <Setter Property="ItemsPanel"> 
     <Setter.Value> 
       <ItemsPanelTemplate> 
       <WrapPanel Orientation="Horizontal"  
          Width="520" 
          HorizontalAlignment="Stretch" 
          Margin="0" 
          ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
          IsItemsHost="True" 
        /> 
       </ItemsPanelTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
0

嘗試

  1. 禁用滾動條
  2. 拓寬WrapPanel,看到了視覺衝擊力,是影響?
  3. 進行彩色邊框/背景跟蹤的WrapPanel

這些實際尺寸會幫助你跟蹤問題

1

您必須設置

ScrollViewer.HorizontalScrollBarVisibility="Disabled" 

到您的

<TreeView/> 

不是

<WrapPanel/> 

例如:

<TreeView x:Name="fieldTreeView" Grid.Row="1" Margin="5,0,5,0" Background="Beige"   
      ItemsSource="{Binding Source={StaticResource bla}}" 
      ScrollViewer.HorizontalScrollBarVisibility="Disabled"> 
     <TreeView.Resources>     
      <DataTemplate DataType="{x:Type Model:bla}"> 
       <StackPanel Orientation="Vertical"> 
        <Label Content="{Binding Name}"/> 
        <TextBox Text=""/> 
       </StackPanel>   
      </DataTemplate>     
     </TreeView.Resources> 
     <TreeView.ItemsPanel> 
      <ItemsPanelTemplate>      
       <WrapPanel Orientation="Horizontal"/>      
      </ItemsPanelTemplate> 
     </TreeView.ItemsPanel> 
    </TreeView> 

該解決方案爲我工作。