One of those problems I had was the hated "fixed layout" of a page.
It's a topic already discussed (view the post for Android) but in this case, it's a bit different.
Suppose we want a "fixed header and footer" for every page, how do you do it?
I tried to extend PhoneApplicationPage class, create a Template in the StaticResources zone, but none of these method worked.
The compiler doesn't like it.
And so I decided to make a UserControl (in this case made of other two UserControls where are defined header and footer).
<UserControl x:Class="MyApp.FixedLayout" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" FontFamily="{StaticResource PhoneFontFamilyNormal}" FontSize="{StaticResource PhoneFontSizeNormal}" Foreground="{StaticResource PhoneForegroundBrush}" xmlns:my="clr-namespace:MyApp" d:DesignHeight="768" d:DesignWidth="480"> <Grid x:Name="LayoutRoot" Background="{StaticResource PhoneBackgroundBrush}" > <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <my:Header Background="{StaticResource PhoneBackgroundBrush}" /> <ContentControl Padding="0" x:Name="ContentPanel" Grid.Row="1" Height="580" VerticalAlignment="Top"> </ContentControl> <my:Footer Style="{StaticResource Footer}" /> </Grid> </UserControl>
Then I just opened code behind part and provided this method:
public object ContentPanelTemplate { get { return ContentPanel.Content; } set { ContentPanel.Content = value; } }
Registered my usercontrol to the page and used it in this way:
<my:LayoutTM x:Name="LayoutRoot"> <my:LayoutTM.ContentPanelTemplate> <Grid x:Name="ContentPanel" ... > <TextBlock .... <Button .... <Button .... <Button .... </Grid> </my:LayoutTM.ContentPanelTemplate> </my:LayoutTM>
And this is how I did it.
Remeber that if you wanna retrieve controls (from the UC) by name you don't have to call this method
this.FindByName("txtTest");but this one:
nameOfUserControl.FindByName("txtTest");
I end this post with a vital question:
Are there a simpler way to do this?
No time to find it :P
My requiem is finished!
No comments:
Post a Comment