Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么每页只能有一个Silverlight UserControl实例?_Silverlight_User Controls_Visual Tree - Fatal编程技术网

为什么每页只能有一个Silverlight UserControl实例?

为什么每页只能有一个Silverlight UserControl实例?,silverlight,user-controls,visual-tree,Silverlight,User Controls,Visual Tree,这很蹩脚,但我尝试在Silverlight页面中添加两个UserControl,我得到一个异常,告诉我(通过大量挖掘)相同的控件名称已经被用于可视化树两次。因此,我的UserControl中的控件被命名,因此我一次只能在页面中包含一个UserControl。这是真的,还是我没有意识到什么?微软真的放弃了代码重用吗?这太差劲了 编辑 对于来到这里的人,我得到的是System.Resources.MissingManifestResourceException异常。花了一些时间才发现问题在于可视化树

这很蹩脚,但我尝试在Silverlight
页面中添加两个
UserControl
,我得到一个异常,告诉我(通过大量挖掘)相同的控件名称已经被用于可视化树两次。因此,我的
UserControl
中的控件被命名,因此我一次只能在
页面中包含一个
UserControl
。这是真的,还是我没有意识到什么?微软真的放弃了代码重用吗?这太差劲了

编辑

对于来到这里的人,我得到的是System.Resources.MissingManifestResourceException异常。花了一些时间才发现问题在于可视化树中的名称不明确。希望这对你有帮助。以下是完整的例外文本

进一步编辑

这是我的XAML:

<Grid x:Name="LayoutRoot">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>

    <TextBlock x:Name="HeaderText"
        res:Strings.Assignment="Text=MachiningView_Name"/>

    <sdk:TabControl Grid.Row="2">
        <sdk:TabItem Header="Projects">
            <ScrollViewer>
                <Grid>
                    <controls:Organizer Margin="4" ItemsSource="{Binding ProjectSummaries}" Height="24" VerticalAlignment="Top">
                        <controls:Organizer.GroupDescriptions>
                            <controls:OrganizerGroupDescription res:Strings.Assignment="Text=NoGroupingText" IsDefault="True" />
                            <controls:OrganizerGroupDescription res:Strings.Assignment="Text=GroupOwnerEmailText">
                                <controls:OrganizerGroupDescription.GroupDescription>
                                    <helpers:OwnerEmailGroupDescription />
                                </controls:OrganizerGroupDescription.GroupDescription>
                            </controls:OrganizerGroupDescription>
                            <controls:OrganizerGroupDescription res:Strings.Assignment="Text=GroupStoreNumberText">
                                <controls:OrganizerGroupDescription.GroupDescription>
                                    <helpers:StoreNumberGroupDescription />
                                </controls:OrganizerGroupDescription.GroupDescription>
                            </controls:OrganizerGroupDescription>
                        </controls:Organizer.GroupDescriptions>
                    </controls:Organizer>
                </Grid>
            </ScrollViewer>
        </sdk:TabItem>
        <sdk:TabItem Header="Machine Queues">
            <ScrollViewer>
                <Grid>
                    <controls:Organizer Margin="4" ItemsSource="{Binding ProjectSummaries}" Height="24" VerticalAlignment="Top">
                        <controls:Organizer.GroupDescriptions>
                            <controls:OrganizerGroupDescription res:Strings.Assignment="Text=NoGroupingText" IsDefault="True" />
                            <controls:OrganizerGroupDescription res:Strings.Assignment="Text=GroupOwnerEmailText">
                                <controls:OrganizerGroupDescription.GroupDescription>
                                    <helpers:OwnerEmailGroupDescription />
                                </controls:OrganizerGroupDescription.GroupDescription>
                            </controls:OrganizerGroupDescription>
                            <controls:OrganizerGroupDescription res:Strings.Assignment="Text=GroupStoreNumberText">
                                <controls:OrganizerGroupDescription.GroupDescription>
                                    <helpers:StoreNumberGroupDescription />
                                </controls:OrganizerGroupDescription.GroupDescription>
                            </controls:OrganizerGroupDescription>
                        </controls:Organizer.GroupDescriptions>
                    </controls:Organizer>
                </Grid>
            </ScrollViewer>
        </sdk:TabItem>
    </sdk:TabControl>
</Grid>

这是我的用户控件的XAML:

<StackPanel Orientation="Horizontal" DataContext="{Binding ElementName=UserControl}">
    <sdk:Label Content="Page:" VerticalAlignment="Center" Margin="0,0,5,0"/>

    <sdk:DataPager Name="_projectSummariesPager"
                   Margin="0,0,5,0"
                   DisplayMode="FirstLastPreviousNextNumeric"
                   Source="{Binding Path=ItemsSource}"
                   PageSize="10"/>

    <ComboBox Name="_itemPerPageCombo"
              Margin="0,0,5,0" 
              SelectionChanged="_itemPerPageCombo_SelectionChanged"
              SelectedItem="{Binding Path=SelectedPageSize, Mode=TwoWay}"
              SelectedValuePath="Value"
              ItemsSource="{Binding Path=PageSizes}"/>

    <ComboBox Name="_groupDescription" 
              Margin="0,0,5,0" 
              SelectionChanged="_groupDescription_SelectionChanged"
              SelectedItem="{Binding Path=SelectedGroupDescription, Mode=TwoWay}"
              ItemsSource="{Binding Path=GroupDescriptions}"/>
</StackPanel>

添加UserControl时,请确保为其指定唯一的名称,即:

<Page ...
    <StackPanel>
         <local:YourUserControl x:Name="Foo" />
         <!-- Make sure not to duplicate x:Name/Name here! -->
         <local:YourUserControl x:Name="Bar" />
    </StackPanel>
</Page>

为Xaml中的元素指定的名称在名称范围内必须是唯一的。LoadComponent的每次执行都会创建一个新的名称范围。因此,当使用控件的多个实例时,
UserControl
中的名称在可视化树中不会冲突

所以现在这个问题的答案是:因为你做错了什么

什么是“某物”目前还不清楚。也许如果您在问题中包含您的xaml,我们可以帮助您

编辑

所以从字里行间看,这就是我猜你在做的。您有一个UserControl,它的属性有一个数字,您希望UserControl中的控件绑定到这些属性,因此您要执行以下操作:-

 <StackPanel Orientation="Horizontal" DataContext="{Binding ElementName=UserControl}">  

其中LayoutRoot是顶级
网格的名称,它是UserControl内容的根。这仍然通过网格的
Parent
属性绑定到UserControl本身。但是,这不需要在自己的xaml中将名称添加到UserControl本身。

实际上命名我的用户控件,这是一个新颖的想法。它成功了,进步真是太好了@迈克尔,我不是白痴。那甚至不会编译。正如里德在下面教我的,我的问题是我根本没有给它们命名。@Jordan:不给你的控件命名通常不会导致这个问题。SL的版本?Xaml?尽量限制你的挫败感。@Jordan,只是试图帮助..@AnthonyWJones,Visual Studio 2010,.Net 4.0(带有一些3.5外部依赖项)、Silverlight 4,我并不沮丧。对不起。@MichaelS,我为明显的炎症反应感到抱歉。我经常被人给我愚蠢的答案,我把你的错误理解为其中之一。再次抱歉,我已经提供了我的XAML。我真的很想知道我做错了什么。是的,很久以前我开始使用Silverlight时创建了这个控件。谢谢你的建议。
 <StackPanel Orientation="Horizontal" DataContext="{Binding ElementName=LayoutRoot.Parent}">