我想为我的应用程序做一个通用设置页面。我有一个不同类型的设置列表,每个对应以下界面:
public interface ISettings
{
string SectionLabel { get; }
View SectionView { get; }
}
每种类型的设置表示应用程序设置的一个给定方面或部分。目标是使每种类型的设置都能定义自己的外观和调整自己值的方式。
我有一个设置页面,其中列出了所有设置:public List setingssections {get =>App.AppSettings.SettingsSections;}
在XAML设置页面中,我想这样显示它们:
<StackLayout BindableLayout.ItemsSource="{Binding settingsSections, Source={x:Reference this}}" Padding="0" BackgroundColor="White">
<BindableLayout.ItemTemplate>
<DataTemplate>
<xct:Expander>
<xct:Expander.Header>
<StackLayout Orientation="Horizontal">
<Image Source="{Helpers:ImageResource Images.filledDownArrow.png}" HeightRequest="{Binding Source={x:Reference heightRef}, Path=Height, Converter={Helpers:IntMultiplier Multiplier=0.99}}"
HorizontalOptions="Start"
VerticalOptions="Center">
<Image.Triggers>
<DataTrigger TargetType="Image"
Binding="{Binding Source={RelativeSource AncestorType={x:Type xct:Expander}}, Path=IsExpanded}"
Value="True">
<Setter Property="Source"
Value="{Helpers:ImageResource Images.filledRightArrow.png}" />
</DataTrigger>
</Image.Triggers>
</Image>
<Label x:Name="heightRef" Text="{Binding SectionLabel}"
FontAttributes="Bold"
FontSize="Medium" />
</StackLayout>
</xct:Expander.Header>
<xct:Expander.Content="{Binding SectionView}"/>
</xct:Expander>
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>
当然,这行不行:
<xct:Expander.Content="{Binding View}"/>
我怎样才能达到我的目标?有人能帮帮我吗?我认为我不能使用自定义控件,因为我应该根据所引用的设置的实际类型来改变stacklayout的每一行/每一节控件的类型。
选项1
你不需要在这里指定xct:Expander.Content
,无论你放在那里,都会隐式地设置Content属性。
代替
<xct:Expander.Content="{Binding SectionView}"/>
<ContentView Content="{Binding SectionView}"/>
选项2
这样指定:
<DataTemplate>
<xct:Expander Content="{Binding SectionView}">
<xct:Expander.Header>
...