2015-12-16 3 views
0

У меня есть сценарий, где мне нужно создать шаблон и использовать его во многих местах.Windows Phone 8.1 - Создание шаблона и его использование во многих местах?

, например:

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

Проблема я столкнулся это, первый раз, когда он работает отлично, и когда я вернусь и снова throwing exception "Элемент уже является дочерним элементом другого элемента".

Пожалуйста, предложите мне правильный путь или есть другой способ.

PS: Я хочу создать несколько сотен шаблонов, так что я не могу пойти с User Control.

Заранее спасибо.

+0

При переходе в другой раз вы проверяете 'если (MainGird.Children.Contains (grdSpecificationTemplate)) '? Это может решить проблему. Если он уже добавлен, вам больше не нужно добавлять ir. – Meneses

ответ

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"] 
} 
+0

Это не решит мою проблему. ControlTemplate и DataTemplate могут использоваться только с общими элементами. Как я могу получить содержимое внутри шаблона i.e Grid программно? –

+0

Вы можете использовать привязку в ControlTemplate и установить DataContext для ContentControl, который вы создаете. Но, читая это, я думаю, что создание UserControl было бы лучше для вас. –

+0

То, что я изначально упомянул, я не могу пойти с UserControl, так как существует потребность в более чем 100 шаблонах, в которых я получаю 100 страниц UserControl. –