我可以将Syncfusion SfTreeView的大小设置为动态吗?

问题描述

我将SfTreeView放在SfExpander中,并且TreeView在它下面占据了很多空间。[在此处输入图像描述] [1]

我试图放入网格并将高度设置为“自动”,但是没有用。 [1]:https://i.stack.imgur.com/kDP3l.png

@H_502_4@<expander:SfExpander DynamicSizeMode="Content" IsExpanded="False"> <expander:SfExpander.Header> <Label TextColor="#495F6E" Text="TreeView list" FontSize="16" </expander:SfExpander.Header> <expander:SfExpander.Content> <Grid> <Grid.RowDeFinitions> <RowDeFinition Height="Auto"></RowDeFinition> </Grid.RowDeFinitions> <treeview:SfTreeView x:Name="treeView2" ItemHeight="34" ItemsSource="{Binding ImageNodeInfo}"> <treeview:SfTreeView.ItemTemplate> <DataTemplate> <Grid x:Name="grid" Padding="2,2,2" RowSpacing="0" > <Grid.RowDeFinitions> <RowDeFinition Height="Auto"/> <RowDeFinition Height="1"/> </Grid.RowDeFinitions> <Grid> <Grid.ColumnDeFinitions> <ColumnDeFinition Width="{Binding Level,Converter={StaticResource IndentationConverter}}" /> <ColumnDeFinition Width="30" /> <ColumnDeFinition Width="60" /> <ColumnDeFinition Width="*" /> </Grid.ColumnDeFinitions> <Image Grid.Column="1" Source="{Binding IsExpanded,Converter={StaticResource ExpanderIconConverter}}" IsVisible="{Binding HasChildNodes,Converter={StaticResource ExpanderIconVisibilityConverter}}" VerticalOptions="Center" HorizontalOptions="Center" HeightRequest="15" WidthRequest="15"/> <Image Grid.Column="2" Source="{Binding Content.ImageIcon}" VerticalOptions="Center" HorizontalOptions="Start" HeightRequest="16" WidthRequest="60"/> <Grid Grid.Column="3" RowSpacing="1" Padding="1,0" VerticalOptions="Center"> <Label LineBreakMode="Nowrap" Text="{Binding Content.ItemName}" VerticalTextAlignment="Center" FontSize="Body" FontAttributes="Bold"/> </Grid> </Grid> <BoxView HeightRequest="1" BackgroundColor="Gray" Grid.Row="1"/> </Grid> </DataTemplate> </treeview:SfTreeView.ItemTemplate> </treeview:SfTreeView> </Grid> </expander:SfExpander.Content> </expander:SfExpander>

解决方法

我们从头开始检查了报告的查询“如何设置动态高度”。我们想通知您,TreeView将加载视图大小。如果要自定义TreeView的高度,则可以根据项目大小为TreeView设置HeightRequest。请参考以下代码段以达到您的要求,

Xaml:对SfTreeView使用EventToCommand行为,对QueryNodeSize事件使用命令。绑定TreeView的HeightRequest以基于节点更新Treeview的高度。

<syncfusion:SfTreeView x:Name="treeView"  
                               ItemHeight="40" 
                               HeightRequest="{Binding TreeViewHeight}" 
                               ChildPropertyName="SubFiles" 
                               ItemTemplateContextType="Node" 
                               AutoExpandMode="AllNodesExpanded" 
                               ItemsSource="{Binding ImageNodeInfo}" 
                               BackgroundColor="Beige"> 
            <syncfusion:SfTreeView.Behaviors> 
                <local:EventToCommandBehavior EventName="QueryNodeSize" Command="{Binding Path=BindingContext.QueryNodeSizeCommand,Source={x:Reference treeView}}"/> 
            </syncfusion:SfTreeView.Behaviors> 
            … 
</syncfusion:SfTreeView> 
 
ViewModel: Create Command with QueryNodeSizeEventArgs. 
private double treeViewHeight = -1; 
 
//Property to set TreeView height. 
public double TreeViewHeight 
{ 
    get { return treeViewHeight; } 
    set 
    { 
        treeViewHeight = value; 
        this.RaisedOnPropertyChanged("TreeViewHeight"); 
    } 
} 
 
//Command for QueryNodeSize event. 
public Command<QueryNodeSizeEventArgs> QueryNodeSizeCommand { get; set; } 
 
public FileManagerViewModel() 
{ 
    //Initialize the command. 
    QueryNodeSizeCommand = new Command<QueryNodeSizeEventArgs>(QueryNodeSizeMethod); 
} 
 
/// <summary> 
/// Command method to calculate the TreeView height. 
/// </summary> 
/// <param name="args">Argument which holds the information of the node.</param> 
private void QueryNodeSizeMethod(QueryNodeSizeEventArgs args) 
{ 
    var item = args.Node.Content as FileManager; 
    if (!item.IsHandled) 
    { 
        this.TreeViewHeight += args.Height; 
        item.IsHandled = true; 
    } 
} 

我们已根据您的要求附上了可行的样本。您可以从以下链接中找到它们,

示例:https://www.syncfusion.com/downloads/support/directtrac/general/ze/TreeViewXamarin-1814245514

关于, SaiGanesh Sakthivel