简体   繁体   中英

Xamarin.Forms DynamicResource doesn't seem to be working

I can't seem to get a DynamicResource working correctly.

Here's the XAML in App.xml:

<Application.Resources>
    <ResourceDictionary>
        <Thickness x:Key ="DefaultInsets"
                   Bottom="4"
                   Top   ="4"
                   Left  ="8"
                   Right ="8" />
    </ResourceDictionary>
</Application.Resources>

And here's what I'm trying to do inside another file's ContentView :

<StackLayout 
    VerticalOptions="Center" 
    HeightRequest="225" 
    Margin="{DynamicResource DefaultInsets}" >
        <Entry
            x:Name="nameControl"
            Placeholder="Full Name"
            Margin="{DynamicResource DefaultInsets}"
            />
        <Entry
            x:Name="passwordControl"
            IsPassword="True"
            Placeholder="Password"
            Margin="{DynamicResource DefaultInsets}" />
</StackLayout>

It seems like this should make consistent insets for the StackLayout from the ContentView , and for the Entry fields from the StackLayout . But I don't see any of that.

What have I done wrong?

Update : I have also tried this with StaticResource , and still no luck.

I use following type with ResourceDictionary . For distinguish, I set the top_margin to 40, here is my screenshot.

在此处输入图片说明

Here is my ResourceDictionary .

   <Application.Resources>
    <ResourceDictionary>
        <OnPlatform x:Key="OuterPadding" x:TypeArguments="Thickness">
            <On Platform="Android">8 ,40,8,4</On>
            <On Platform="iOS">20</On>
            <On Platform="WinPhone">24</On>
        </OnPlatform>
        <!--  left, top, right, and bottom-->
    </ResourceDictionary>
  </Application.Resources>

Here is my layout.

    <StackLayout 
     VerticalOptions="Center" 
     HeightRequest="225" 
     Margin="{DynamicResource OuterMargin}" >
        <Entry
        x:Name="nameControl"
        Placeholder="Full Name"
        Margin="{DynamicResource OuterMargin}"
        />
        <Entry
        x:Name="passwordControl"
        IsPassword="True"
        Placeholder="Password"
        Margin="{DynamicResource OuterMargin}" />
    </StackLayout>

Update

I found you layout issue is related to the VerticalOptions="Center" in the StackLayout (If you set the VerticalOptions="Center" , then set the margin value is not work).

If I delete it and use StaticResource .

Here is running screenshot(For testing, I change the value of margin top to 20)

在此处输入图片说明

Other answers may be valid for some people, but in the end here's what I was doing wrong:

InitializeComponent() was never getting called inside App.xaml.cs.

I had an if-then statement that was always hitting a return before ever getting to InitializeComponent().

When that doesn't get called, App.xaml is inaccessible to the rest of the app, and nothing defined there is available as a DynamicResource .

So I moved InitializeComponent() to happen before the if-then statement, and now it all works like gangbusters.

I hope this helps someone!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM