问题描述
我将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