【问题标题】:Using same dictionary template multiple times?多次使用同一个字典模板?
【发布时间】:2016-03-26 20:49:23
【问题描述】:

我正在尝试使用 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>

我希望能解决这个问题,因为我没有选择:(

【问题讨论】:

    标签: c# .net wpf xaml dictionary


    【解决方案1】:

    我不太确定,但我认为发生这种情况是因为您不能将相同的实例添加为 2 个或更多元素的子元素,在这种情况下,每个 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>
    

    【讨论】:

    • 你好@bto.rdz 我刚试过这个,现在由于某种原因我得到了这个结果。 i63.tinypic.com/mim2k8.png
    • 因为我告诉过你,你不能将同一个实例添加为多个控件的子控件
    • 嗯。也许我当时理解错了。我能做些什么来实现这一目标?
    • @MaxBeekmans 这不适合你吗?这应该可以解决您的问题
    • 对不起,我对这个概念有点陌生。我应该如何在这个网格的每条记录中实现这个 DataTemplate?我刚刚用谷歌搜索了这个,我看到有几个教程提到了在另一个组件上的绑定。我应该把每个孩子都绑定到这个吗?
    【解决方案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>
    

    【讨论】:

      猜你喜欢
      • 2014-03-27
      • 2013-06-25
      • 2013-09-02
      • 2014-08-30
      • 1970-01-01
      • 1970-01-01
      • 2013-10-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多