2014-01-13 45 views
0

如果我創建一個簡單的StackPanel和放置一些物品,並定義樣式增加利潤,一切運作良好,通過這個簡單的例子作爲證明:問題設置的StackPanel元素樣式當一個ItemsControl

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

顯然module:ModuleElement是我的UserControl,但問題仍然存在,如果我使用默認控件,如典型的Button

但是,我不想只是一個StackPanel - 我想要一個ItemsControl。所以我定義了我的控件:

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

上面代碼中添加的幾項是用於測試目的 - 在這種情況下,邊距是默認值(0)。

發生了什麼事?爲什麼這不起作用?我需要做些什麼來解決這個問題?我當然可以爲每個元素手動設置邊距,但我覺得我錯過了一些東西,寧可看到它定義在Style ...

回答

1

您可能會將樣式放入ItemsControl資源而不是StackPanel資源:在Silverlight

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

資源查找遍歷「對象樹」(見here),其據我明白的是不可視樹,但在XAML定義的樹。

+0

雖然這確實有效(我肯定會投票),但這並不能真正解釋問題。我的代碼基於類似的場景,而不是'StackPanel',我使用了'WrapPanel',在這種情況下,我的解決方案(將'Resource'放在'WrapPanel'定義中)工作,所以.. 。爲什麼它現在工作而不是現在? – Shaamaan

+1

你是指一個WrapPanel作爲ItemsControl中的ItemsPanel?這確實很奇怪。 – Clemens

+0

是的,確切地說。代碼適用於這種情況。除非我很幸運,否則'WrapPanel'應該不會起作用。 ; P – Shaamaan

相關問題