Davide Tramontano
Davide Tramontano

Reputation: 1

Resume and modify some graphic elements present in another page

I have created a ControlTemplate in the app.xaml, defining the graphic part, only in the cs I would like to take some elements, to which I have given the name, to assign them the click event, but it signals me that they do not exist in the current context . Someone who could kindly tell me how to please? Someone, if possible, modify the source of the webview present in the main page, directly from app.xaml.cs

My code in the template is this:`

<Application.Resources>
    <ResourceDictionary>
        <ControlTemplate x:Key="HeaderFooterTemplate"><ContentPresenter />
                <StackLayout>
                    <BoxView HorizontalOptions="FillAndExpand" BackgroundColor="#DDDDDD" HeightRequest="2" Margin="0" />
                    <ScrollView Orientation="Horizontal">
                        <Grid RowSpacing="0">
                            <StackLayout Background="#c9ced6" HeightRequest="120" MinimumHeightRequest="120" Orientation="Horizontal" Grid.Row="0" Spacing="2">
                                <Grid WidthRequest="100" MinimumHeightRequest="120" BackgroundColor="#373B53" Padding="10" x:Name="Dashboard">
                                    <Image Source="homeArancione" x:Name="imgDashboard" HorizontalOptions="Center" VerticalOptions="Center" WidthRequest="30" HeightRequest="30" Grid.Row="0" />
                                    <Label Text="DASHBOARD" TextColor="#c9ced6" FontAttributes="Bold" HorizontalOptions="Center" Grid.Row="1" />
                                </Grid></Grid>

And in the reference page I recall it like this:

ControlTemplate="{StaticResource HeaderFooterTemplate}"

Graphically it works, but in the cs is I can't modify the texts to the labels or assign click events to the elements because it tells me that they don't exist in the current context

Upvotes: -2

Views: 67

Answers (1)

Wendy Zang - MSFT
Wendy Zang - MSFT

Reputation: 10978

If you want to change the text or trigger the click event of the label in ControlTemplate, you could use the GestureRecognizers. The x:Name could not be found in the ControlTemplate directly.

  <ControlTemplate x:Key="HeaderFooterTemplate">
            <!--<ContentPresenter />-->
            <StackLayout>
                <BoxView HorizontalOptions="FillAndExpand" BackgroundColor="#DDDDDD" HeightRequest="2" Margin="0" />
                <ScrollView Orientation="Horizontal">
                    <Grid RowSpacing="0">
                        <StackLayout Background="#c9ced6" HeightRequest="120" MinimumHeightRequest="120" Orientation="Horizontal" Grid.Row="0" Spacing="2">
                            <Grid WidthRequest="100" MinimumHeightRequest="120" BackgroundColor="#373B53" Padding="10" x:Name="Dashboard">
                                <Image Source="homeArancione" x:Name="imgDashboard" HorizontalOptions="Center" VerticalOptions="Center" WidthRequest="30" HeightRequest="30" Grid.Row="0" />
                                <Label Text="DASHBOARD" TextColor="#c9ced6" FontAttributes="Bold" HorizontalOptions="Center" Grid.Row="1">
                                    <Label.GestureRecognizers>
                                        <TapGestureRecognizer Tapped="TapGestureRecognizer_Tapped"></TapGestureRecognizer>
                                    </Label.GestureRecognizers>
                                </Label>
                            </Grid>
                        </StackLayout>
                    </Grid>
                </ScrollView>
            </StackLayout>
        </ControlTemplate>

Code behind: App.xaml.cs

private void TapGestureRecognizer_Tapped(object sender, EventArgs e)
    {
        Console.WriteLine("-----------");
        var label = sender as Label;
        label.Text = "Hello";
    }

Update:

update the text of the label as soon as the page loads, without having to click

Xamarin provide GetTemplateChild to get a named element from a template. The GetTemplateChild method should only be called after the OnApplyTemplate method has been called. If you want to call the OnApplyTemplate method, this template should be added for the contentpage.

You could refer to the thread i done before. Xamarin SwipeView Open Left Item In ControlTemplate

Upvotes: 0

Related Questions