Невозможно прочитать дважды из ресурса приложения в классе viewmodel - PullRequest
0 голосов
/ 23 сентября 2019

Я определил ресурс в App.xaml, который пытается прочитать из класса модели представления.

Различные версии, которые были опробованы

<OnPlatform x:Key="HandpickedPhone"
                    x:TypeArguments="x:Double"
                    Android="250"
                    iOS="240" />
        <OnPlatform x:Key="HandpickedTablet"
                    x:TypeArguments="x:Double"
                    Android="375"
                    iOS="360" />
        <OnIdiom x:Key="HandpickedHeight"
                 x:TypeArguments="x:Double"
                 Phone="{StaticResource HandpickedPhone}"
                 Tablet="{StaticResource HandpickedTablet}" />

<OnPlatform x:Key="HorizontalListHeight"
                    x:TypeArguments="x:Double">
            <OnPlatform.Android>
                <OnIdiom x:TypeArguments="x:Double"
                         Phone="250"
                         Tablet="375" />
            </OnPlatform.Android>
            <OnPlatform.iOS>
                <OnIdiom x:TypeArguments="x:Double"
                         Phone="240"
                         Tablet="260" />
            </OnPlatform.iOS>
        </OnPlatform>

Я пытаюсь прочитать его идинамически установить запрос высоты, как,

double height = (double)App.Current.Resources["HorizontalListHeight"];
                        horizontalStack.HeightRequest = height;

Но приведение к двойному выбрасыванию IllegalCastException, и в то же время я могу привести к правильному значению от наблюдателя в VS.

Ответы [ 2 ]

0 голосов
/ 23 сентября 2019

Во-первых, проверьте https://forums.xamarin.com/discussion/comment/354754/#Comment_354754.

Здесь height не double, а OnPlatform<double>, поэтому измените код как

 var height = (OnPlatform<double>)App.Current.Resources["HorizontalListHeight"];
 horizontalStack.HeightRequest = height;

Однако,это не рекомендуемый способ, мы часто используем Style в ResourceDictionaty.

       <Style x:Name="HorizontalListHeight" TargetType="StackLayout">
            <Setter Property="HeightRequest">
                <Setter.Value>
                    <OnPlatform  x:TypeArguments="x:Double">
                        <OnPlatform.Android>
                            <OnIdiom x:TypeArguments="x:Double"  Phone="250" Tablet="375" />
                        </OnPlatform.Android>
                        <OnPlatform.iOS>
                            <OnIdiom x:TypeArguments="x:Double" Phone="240" Tablet="260" />
                        </OnPlatform.iOS>
                    </OnPlatform>
                </Setter.Value>
            </Setter>
        </Style>

horizontalStack.Style = Application.Current.Resources["HorizontalListHeight"] as Style;
0 голосов
/ 23 сентября 2019

Вы должны использовать ширину, высоту или толщину в x: TypeArguments Как это: -

       <OnPlatform x:TypeArguments="Thickness">
            <OnPlatform.Platforms>
                <On Platform="iOS" Value="0, 20, 0, 0" />
                <On Platform="Android" Value="0, 0, 0, 0" />
                <On Platform="UWP" Value="0, 0, 0, 0" />
            </OnPlatform.Platforms>
        </OnPlatform>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...