0

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

例如 :

<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);

我面临的问题是,它第一次工作正常,当我返回并再次导航时,它抛出异常“该元素已经是另一个元素的子元素”。

请建议我这是正确的做法还是有其他方法。

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

提前致谢。

4

1 回答 1

0

有一个更简单的方法。将您的“模板”定义为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"]
}
于 2015-12-17T12:11:23.347 回答