Windows Phone 8.1 - 创建模板并在许多地方使用它?

时间:2015-12-16 12:35:32

标签: windows-phone-8.1 winrt-xaml windows-8.1-universal

我有一个场景,我需要创建模板并在很多地方使用它。

例如:

<Grid VerticalAlignment="Top" Background="White">
<TextBlock  Foreground="Black" FontSize="24" FontWeight="SemiBold" Margin="12 12 12 6"/>
<Border Background="DarkGray" HorizontalAlignment="Left" Height="2" Width="170" Margin="12 0 0 12"/>
<Border Background="DarkGray" HorizontalAlignment="Right" Height="2" Width="170" Margin="12 0 0 12"/>

我试过这样的事情:

<ContentPresenter x:Key="specificationTemplate1">
    <Grid VerticalAlignment="Top" Background="White">
       <TextBlock  Foreground="Black" FontSize="24" FontWeight="SemiBold" Margin="12 12 12 6"/>
        <Border Background="DarkGray" HorizontalAlignment="Left" Height="2" Width="170" Margin="12 0 0 12"/>
        <Border Background="DarkGray" HorizontalAlignment="Right" Height="2" Width="170" Margin="12 0 0 12"/>
    </Grid>
</ContentPresenter>
Grid grdSpecificationTemplate = (App.Current.Resources["specificationTemplate1"] as ContentPresenter).Content as Grid;
MainGird.Children.Add(grdSpecificationTemplate);

我面临的问题是,第一次工作正常,当我回去再次导航时,它会抛出异常&#34;元素已经是另一个元素的孩子了#34;。

请建议我这是一种正确的做法,还是有其他办法。

PS:我想创建这样的一百个模板,所以我不能使用用户控件。

提前致谢。

1 个答案:

答案 0 :(得分:0)

有一种更简单的方法。定义您的&#34;模板&#34;作为ControlTeplate

<ControlTemplate  x:Key="specificationTemplate1">
    <Grid VerticalAlignment="Top" Background="White">
    <TextBlock  Foreground="Black" FontSize="24" FontWeight="SemiBold" Margin="12 12 12 6"/>
    <Border Background="DarkGray" HorizontalAlignment="Left" Height="2" Width="170" Margin="12 0 0 12"/>
    <Border Background="DarkGray" HorizontalAlignment="Right" Height="2" Width="170" Margin="12 0 0 12"/>
    </Grid>
</ControlTemplate>

您只需将其用作ContentControl

即可
<ContentControl Template="{StaticResource specificationTemplate1" />

或代码

var c = new ContentControl
{
    Template = (ControlTemplate)App.Current.Resources["specificationTemplate1"]
}