2015-12-20 8 views
0

Я пытаюсь сделать судоку с помощью сетки 9x9, однако для того, чтобы иметь чистый код, я пробовал словари. После написания кода, приведенного ниже, предварительный просмотр достигает сетки 9x9. Однако всякий раз, когда я запускаю приложение, я не получаю тот же результат, я получаю только последнюю загруженную сетку.Используя тот же шаблон словаря несколько раз?

это словарь, который имеет следующий сетки элемент:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 

<Grid x:Key="GridTemplate" ShowGridLines="True"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition /> 
     <ColumnDefinition /> 
     <ColumnDefinition /> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition /> 
     <RowDefinition /> 
     <RowDefinition /> 
    </Grid.RowDefinitions> 

    <Label Grid.Column="0" Grid.Row="0" ></Label> 
    <Label Grid.Column="0" Grid.Row="1" ></Label> 
    <Label Grid.Column="0" Grid.Row="2" ></Label> 
    <Label Grid.Column="1" Grid.Row="0" ></Label> 
    <Label Grid.Column="1" Grid.Row="1" ></Label> 
    <Label Grid.Column="1" Grid.Row="2" ></Label> 
    <Label Grid.Column="2" Grid.Row="0" ></Label> 
    <Label Grid.Column="2" Grid.Row="1" ></Label> 
    <Label Grid.Column="2" Grid.Row="2" ></Label> 

</Grid> 

Теперь я пытаюсь использовать это в 9 раз в другую сетку в это окно

<Window x:Class="SudokuWPF.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 

<Window.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="GridDictonary.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Window.Resources> 

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition /> 
     <ColumnDefinition /> 
     <ColumnDefinition /> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition /> 
     <RowDefinition /> 
     <RowDefinition /> 
    </Grid.RowDefinitions> 

    <ContentControl Content="{StaticResource GridTemplate}" Grid.Column="0" Grid.Row="0" /> 
    <ContentControl Content="{StaticResource GridTemplate}" Grid.Column="0" Grid.Row="1" /> 
    <ContentControl Content="{StaticResource GridTemplate}" Grid.Column="0" Grid.Row="2" /> 
    <ContentControl Content="{StaticResource GridTemplate}" Grid.Column="1" Grid.Row="0" /> 
    <ContentControl Content="{StaticResource GridTemplate}" Grid.Column="1" Grid.Row="1" /> 
    <ContentControl Content="{StaticResource GridTemplate}" Grid.Column="1" Grid.Row="2" /> 
    <ContentControl Content="{StaticResource GridTemplate}" Grid.Column="2" Grid.Row="0" /> 
    <ContentControl Content="{StaticResource GridTemplate}" Grid.Column="2" Grid.Row="1" /> 
    <ContentControl Content="{StaticResource GridTemplate}" Grid.Column="2" Grid.Row="2" /> 

</Grid> 

Я надеюсь на исправление этой проблемы, потому что у меня нет опций :(

ответ

2

Возможно, было бы полезно обернуть ресурс в пользовательском элементе управления?

Это работало на моей машине (без заполнения номера)

страницы:

<Page x:Class="WPFAnswers.Ans34384501.P1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:local="clr-namespace:WPFAnswers.Ans34384501" 
    mc:Ignorable="d" 
    d:DesignHeight="300" d:DesignWidth="300" 
    Title="P1"> 

<Grid > 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition /> 
     <ColumnDefinition /> 
     <ColumnDefinition /> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition /> 
     <RowDefinition /> 
     <RowDefinition /> 
    </Grid.RowDefinitions> 
    <local:UC1 Grid.Column="0" Grid.Row="0"></local:UC1> 
    <local:UC1 Grid.Column="0" Grid.Row="1"></local:UC1> 
    <local:UC1 Grid.Column="0" Grid.Row="2"></local:UC1> 
    <local:UC1 Grid.Column="1" Grid.Row="0"></local:UC1> 
    <local:UC1 Grid.Column="1" Grid.Row="1"></local:UC1> 
    <local:UC1 Grid.Column="1" Grid.Row="2"></local:UC1> 
    <local:UC1 Grid.Column="2" Grid.Row="0"></local:UC1> 
    <local:UC1 Grid.Column="2" Grid.Row="1"></local:UC1> 
    <local:UC1 Grid.Column="2" Grid.Row="2"></local:UC1> 
</Grid> 

управления пользователя:

<UserControl x:Class="WPFAnswers.Ans34384501.UC1" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:local="clr-namespace:WPFAnswers.Ans34384501" 
     mc:Ignorable="d" 
     d:DesignHeight="300" d:DesignWidth="300"> 
<Control.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="GridDictonary.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Control.Resources> 
<Grid > 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition /> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition /> 
    </Grid.RowDefinitions> 
    <ContentControl Content="{StaticResource GridTemplate}" Grid.Column="0" Grid.Row="0" /> 
</Grid> 

РЕСУРСЫ е:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
       xmlns:local="clr-namespace:WPFAnswers.Ans34384501"> 
<Grid x:Key="GridTemplate" ShowGridLines="True"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition /> 
     <ColumnDefinition /> 
     <ColumnDefinition /> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition /> 
     <RowDefinition /> 
     <RowDefinition /> 
    </Grid.RowDefinitions> 

    <Label Grid.Column="0" Grid.Row="0" ></Label> 
    <Label Grid.Column="0" Grid.Row="1" ></Label> 
    <Label Grid.Column="0" Grid.Row="2" ></Label> 
    <Label Grid.Column="1" Grid.Row="0" ></Label> 
    <Label Grid.Column="1" Grid.Row="1" ></Label> 
    <Label Grid.Column="1" Grid.Row="2" ></Label> 
    <Label Grid.Column="2" Grid.Row="0" ></Label> 
    <Label Grid.Column="2" Grid.Row="1" ></Label> 
    <Label Grid.Column="2" Grid.Row="2" ></Label> 

</Grid> 

+0

Это очень понравилось вам –

1

Я не совсем уверен, но я думаю, что это происходит потому, что вы не можете добавить тот же экземпляр, что и ребенок из двух или более элементов, в этом случае каждый ContentControl добавляет вашу сетку в качестве дочернего элемента, а это недействительно, вы должны попробовать DataTemplate.

<DataTemplate x:Key="GridTemplate"> 
<Grid ShowGridLines="True"> 
<Grid.ColumnDefinitions> 
    <ColumnDefinition /> 
    <ColumnDefinition /> 
    <ColumnDefinition /> 
</Grid.ColumnDefinitions> 
<Grid.RowDefinitions> 
    <RowDefinition /> 
    <RowDefinition /> 
    <RowDefinition /> 
</Grid.RowDefinitions> 

<Label Grid.Column="0" Grid.Row="0" ></Label> 
<Label Grid.Column="0" Grid.Row="1" ></Label> 
<Label Grid.Column="0" Grid.Row="2" ></Label> 
<Label Grid.Column="1" Grid.Row="0" ></Label> 
<Label Grid.Column="1" Grid.Row="1" ></Label> 
<Label Grid.Column="1" Grid.Row="2" ></Label> 
<Label Grid.Column="2" Grid.Row="0" ></Label> 
<Label Grid.Column="2" Grid.Row="1" ></Label> 
<Label Grid.Column="2" Grid.Row="2" ></Label> 

</Grid> 
</DataTemplate> 
+0

Привет @ bto.rdz Я просто попытался это и теперь по какой-то причине, я получаю этот результат. http://i63.tinypic.com/mim2k8.png –

+0

Это из-за того, что я сказал вам, вы не можете добавить тот же экземпляр, что и ребенок из нескольких элементов управления –

+0

hmm. Возможно, тогда я пропустил это. Что я могу сделать для этого? –