Issue
How could I accese in C# ContentPage, to a StaticResource Template on my App.xaml?
This is my code. The App.xaml:
<Application xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" >
<Application.Resources>
<ControlTemplate x:Key="template">
...
<Label Text="{Binding lbl_title}" Grid.Row="0"/>
<!--Body -->
<ContentPresenter Grid.Row="1"/>
...
</ControlTemplate>
</Application.Resources>
</Application>
The ContentPage.xaml:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
ControlTemplate="{StaticResource template}">
<Grid x:Name="body_grid"/>
</ContentPage>
And the ContentPage.cs:
public partial class MenuPage : ContentPage{
public MenuPage() {
lbl_title.Text = "Title"; //This throw me and ERROR
... // Grid definition
}
}
I need to accese to the lbl_title object not just his .Text property, also his color, background, etc...
Solution
Here is ControlTemplate:
<ControlTemplate x:Key="template">
<StackLayout>
<Label x:Name="lbl_title" Text="test"/>
<Button />
</StackLayout>
</ControlTemplate>
To get the elements in ControlTemplate, you can try to cast the page to IPageController
and use foreach to traverse the controls it contains.
MainPage.cs
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
var controller = this as IPageController;
foreach (var child in controller.InternalChildren)
{
var result = child.FindByName<Label>("lbl_title");
if (result != null)
{
Label myControl = result;
myControl.Text = "new text";
myControl.BackgroundColor = Color.Red;
}
}
}
// ...
}
Update:
Or call the TemplatedPage.GetTemplateChild(String) Method. This method is use to "Retrieves the named element in the instantiated ControlTemplate visual tree".
Label myControl = this.GetTemplateChild("lbl_title") as Label;
myControl.Text = "new test text";
Answered By - 大陸北方網友
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.