DynamicResource стилизация списка и высоты строк сетки в Xamarin - PullRequest
0 голосов
/ 21 декабря 2018

Я использую динамические ресурсы для установки размера шрифта элементов пользовательского интерфейса, чтобы на маленьком планшете текст был немного больше, чтобы его было легче читать, но меньше на устройстве с очень маленьким экраном, которое мне также нужно поддерживать.Отлично работает.

Что не работает, так это масштабирование строк, содержащих этот текст.Например (отредактировано для краткости):

Определения ресурсов в 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>

... что не имеет никакого эффекта.

Я прочитал много статей / постов / примеров о приложениях для стилизации, но они только меняют размер или цвет шрифта.(Фантастический пример: Размер объектов на основе размеров экрана )

Если вы измените размер шрифта, как вы измените размер строки, чтобы соответствовать?Для дополнительного кредита, как бы вы сделали это для строки сетки?Я баловался с ресурсами GridLength, но также не мог заставить это работать.

Спасибо за помощь!

...