C# 在树视图中使用WrapPanel

C# 在树视图中使用WrapPanel,c#,wpf,vb.net,xaml,panel,C#,Wpf,Vb.net,Xaml,Panel,我希望显示具有详细级别的数据,因此我使用TreeView,但每个细节都很短,因此我希望使用WrapPanel(水平)在每行中显示许多细节 比如: 这是一个未展开的项目 这是展开项的标题 信息1信息2信息3信息4 信息5信息6信息7 因此,我尝试定义TreeViewItem的模板,但无法将wrappanel 包当info的datatemplate宽度为100且TreeView时,我每行只有一个信息 是500。我试着设置包装的宽度,ItemsWidth,但没有成功 有什么想法吗 编辑:我终于找到

我希望显示具有详细级别的数据,因此我使用TreeView,但每个细节都很短,因此我希望使用WrapPanel(水平)在每行中显示许多细节

比如:

  • 这是一个未展开的项目

  • 这是展开项的标题

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

    信息5信息6信息7

因此,我尝试定义TreeViewItem的模板,但无法将wrappanel 包当info的datatemplate宽度为100且TreeView时,我每行只有一个信息 是500。我试着设置包装的宽度,ItemsWidth,但没有成功

有什么想法吗


编辑:我终于找到了一个“更简单”的解决方案。但似乎我们 必须定义包装的宽度,这使得解决方案不那么通用

我找到了一个解决方案:以一种风格定义 TreeView项目:

<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="ItemsPanel">
       <Setter.Value>
              <ItemsPanelTemplate>
                <WrapPanel  Orientation="Horizontal"      
                            Width="520"
                            HorizontalAlignment="Stretch" 
                            Margin="0" 
                            ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
                            IsItemsHost="True"  
                    />
              </ItemsPanelTemplate>
       </Setter.Value>
   </Setter>
</Style>

为了完整起见,我仍然让这个不起作用的解决方案在这里。 (为什么不起作用?)


!!!! 这是未包装的包装面板
试试看

  • 禁用滚动条
  • 加宽包装,看看视觉效果,是否受到影响
  • 制作彩色边框/背景以跟踪包装的实际大小

  • 这些将帮助您追踪问题

    编辑:我终于找到了一个“更简单”的解决方案。但似乎我们 必须定义包装的宽度,这使得解决方案不那么通用。 (可能是宽度的装订(但哪个?)可以解决这个问题)

    我找到了一个解决方案:以一种风格定义 TreeView项目:

    <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="ItemsPanel">
           <Setter.Value>
                  <ItemsPanelTemplate>
                    <WrapPanel  Orientation="Horizontal"      
                                Width="520"
                                HorizontalAlignment="Stretch" 
                                Margin="0" 
                                ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
                                IsItemsHost="True"  
                        />
                  </ItemsPanelTemplate>
           </Setter.Value>
       </Setter>
    </Style>
    
    
    
    您必须设置

    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>
    
    
    

    这个解决方案适合我。

    你看到包装纸了吗?它有滚动条吗?也许试着禁用它们。是的,事实上,正如我所说,它是有效的,除了它显示的项目,如果面板是一个垂直堆叠面板。无论我改变什么,它都是水平居中的。是的,它尝试将水平滚动查看器设置为禁用,但它不起作用。如果包装层更宽,会发生什么?解决方案发现,尝试为它设置一个边框,确保它确实是垂直的,或者它只是上面提到的可用空间。还是不知道为什么另一个不行但是。。Thx支持。我将以post的形式编写,如果是,则将其标记为答案,以便遇到相同问题的其他用户也可以享受。