Xamarin中的列表视图和网格行高的DynamicResource样式

时间:2018-12-20 21:06:36

标签: listview xamarin.forms grid-layout dynamicresource

我正在使用动态资源来设置UI元素的字体大小,以便在小型平板电脑上,文本稍大一些以便于阅读,但在非常小的屏幕设备上也需要支持。效果很好。

行不通的是缩放包含该文本的行。例如(为简洁起见编辑):

App.xaml中的资源定义:

    <ResourceDictionary>
        <x:Int32 x:Key="Std32RowHeight">50</x:Int32>
        <x:Double x:Key="StdRowHeight">40</x:Double>

        <x:Double x:Key="StdFontSize">20 </x:Double>
        <Style x:Key="ListText" TargetType="Label"  ApplyToDerivedTypes="True">
            <Setter Property="TextColor" Value="Black" />
            <Setter Property="FontSize" Value="{DynamicResource StdFontSize}" />
        </Style>
        ...

Xaml代码:

        <ListView x:Name="locationList"
            Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="5"
            ItemsSource="{Binding DisplayGroups}"
            HasUnevenRows="true"
            CachingStrategy="RecycleElement" >
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell Height="{DynamicResource StdRowHeight}">  <!-- Causes a runtime error -->
                        <StackLayout Orientation="Horizontal">
                            <Label Text="{Binding Title}" 
                                   TextColor="Black"
                                   FontSize="{DynamicResource StdFontSize}"  <!-- Works -->
                                   VerticalTextAlignment="Center" />
                        </StackLayout>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

...导致此运行时错误:

“无法分配属性“高度”:属性不存在或不可分配,或者值与属性之间的类型不匹配”

我也尝试过这种方法:

        <ListView x:Name="locationList"
            Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="5"
            ItemsSource="{Binding DisplayGroups}"
            HasUnevenRows="false"
            RowHeight="<DynamicResource Std32RowHeight}"  <!-- This row height is an int32 instead of double... -->
            CachingStrategy="RecycleElement" >
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <StackLayout Orientation="Horizontal">
                            <Label Text="{Binding Title}" TextColor="Black" FontSize="{DynamicResource StdFontSize}"
                                   VerticalTextAlignment="Center"
                                   Margin="20,0,0,0"/>
                        </StackLayout>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>

...无效。

我已经阅读了很多有关样式应用程序的文章/帖子/示例,但是它们仅更改字体大小或颜色。 (极好的示例:Sizing objects based on screen dimensions

如果更改字体大小,如何更改行大小以匹配?为了获得额外的信用,您将如何为网格行做这件事?我涉猎GridLength资源,但也无法使它正常工作。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

在您的Listview中,XAML HasUnevenRows为false。如果要动态行高,请尝试将其设置为True