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 に答える