Silverlight 为ItemsControl中的StackPanel元素设置样式时出现问题

Silverlight 为ItemsControl中的StackPanel元素设置样式时出现问题,silverlight,xaml,silverlight-5.0,Silverlight,Xaml,Silverlight 5.0,如果我创建一个简单的StackPanel,并在其中放置一些项目,并定义一个样式来添加边距,所有这些都可以正常工作,如下面的快速示例所示: <StackPanel Grid.Row="1" Orientation="Vertical"> <StackPanel.Resources> <Style TargetType="module:ModuleElement"> <Sette

如果我创建一个简单的
StackPanel
,并在其中放置一些项目,并定义一个样式来添加边距,所有这些都可以正常工作,如下面的快速示例所示:

    <StackPanel Grid.Row="1" Orientation="Vertical">
        <StackPanel.Resources>
            <Style TargetType="module:ModuleElement">
                <Setter Property="Margin" Value="20"/>
            </Style>
        </StackPanel.Resources>
        <module:ModuleElement/>
        <module:ModuleElement/>
    </StackPanel>
上面代码中添加的几个项目用于测试目的-在这种情况下,边距是默认值(0)


发生什么事了?为什么这不起作用?我需要做什么来解决这个问题?当然,我可以为每个元素手动设置边距,但我觉得我遗漏了一些东西,我更希望看到它在
样式中定义。

您可以将样式放入ItemsControl资源而不是StackPanel资源中:

<ItemsControl Grid.Row="1" Margin="20,0,20,0">
    <ItemsControl.Resources>
        <Style TargetType="module:ModuleElement">
            <Setter Property="Margin" Value="0,20,0,0"/>
        </Style>
    </ItemsControl.Resources>
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Orientation="Vertical"/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.Items>
        <module:ModuleElement/>
        <module:ModuleElement/>
    </ItemsControl.Items>
</ItemsControl>


Silverlight中的资源查找遍历“对象树”(请参阅),据我所知,这不是可视化树,而是XAML中定义的树。

虽然这确实有效(我肯定会投票),但这并不能真正解释问题。我的代码基于一个类似的场景,我使用了
WrapPanel
而不是
StackPanel
,在这种情况下,我的解决方案(将
资源
放在
WrapPanel
定义中)起作用,所以。。。为什么它在当时有效而现在无效?你是说在ItemsControl中作为ItemsPanel的WrapPanel?那真的很奇怪。是的,没错。代码在这种情况下工作。除非我运气好,而且包装纸本来就不应该起作用;P
<ItemsControl Grid.Row="1" Margin="20,0,20,0">
    <ItemsControl.Resources>
        <Style TargetType="module:ModuleElement">
            <Setter Property="Margin" Value="0,20,0,0"/>
        </Style>
    </ItemsControl.Resources>
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Orientation="Vertical"/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.Items>
        <module:ModuleElement/>
        <module:ModuleElement/>
    </ItemsControl.Items>
</ItemsControl>