我有一个场景,我需要创建模板并在很多地方使用它。
例如:
<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:我想创建这样的一百个模板,所以我不能使用用户控件。
提前致谢。
答案 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"]
}