2011-03-02 65 views
0

例如,下面是一些代碼來填充列表框2個列表框:Silverlight:如何在資源控件中設置控件的樣式?

<ListBox x:Name="LayoutRoot" Width="200" Height="400" Style="{StaticResource ListStyle}" > 
    <ListBoxItem> 
     <ListBox> 
      <ListBoxItem>11</ListBoxItem> 
      <ListBoxItem>12</ListBoxItem> 
     </ListBox> 
    </ListBoxItem> 
    <ListBoxItem> 
     <ListBox> 
      <ListBoxItem>21</ListBoxItem> 
      <ListBoxItem>22</ListBoxItem> 
     </ListBox> 
    </ListBoxItem> 
</ListBox> 

內部列表框同時出現在垂直列表中顯示其內容。現在,我知道如何讓單個列表框水平顯示其內容,並且我知道如何通過在資源中設置樣式來完成此操作。我無法弄清楚的是如何將其設置爲一次只能應用於外部列表框的資源,而不是每次添加另一個內部列表框(即將其應用於每個內部列表框)。

這是我無數次失敗的嘗試:

<UserControl.Resources> 
    <Style x:Key="ListStyle" TargetType="ListBox"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ListBox> 
        <ListBox.ItemTemplate> 
         <DataTemplate> 
          <ListBox> 
           <ListBox.ItemsPanel> 
            <ItemsPanelTemplate> 
             <toolkit:WrapPanel/> 
            </ItemsPanelTemplate> 
           </ListBox.ItemsPanel> 
          </ListBox> 
         </DataTemplate> 
        </ListBox.ItemTemplate> 
       </ListBox> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</UserControl.Resources> 

如果我還沒有明確表態,我想看看我的列表框是11,12並排側第一排和21 ,並排排列在第二排。

+0

將有辦法做到這一點使用'ItemTemplate'但是你真的確定要這個接口?你真的需要一個可選列表項目的可選列表嗎?我注意到ListBox經常被用於佈局目的,這很好,但並不總是最好的選擇。明確說明爲什麼要使用ListBox來說明一個簡單的StackPanels和/或具有ScrollViewer的ItemsControl。如果你描述你的目標,而不是你選擇實現我們目前未知的目標,或許這將是一件好事。 – AnthonyWJones 2011-03-02 20:09:10

+0

目前我有4個列表框,其中2個包含顏色,另外2個包含圖像位。所有列表框都從集合中填充。而不是4個列表框,它將更加整潔地在代碼中填充4個列表框,並將它們添加到用戶界面上的1列表框中。 – descf 2011-03-02 20:32:42

回答

0

如果您使用Silverlight 4,則可以創建隱式樣式。您可以通過在樣式聲明中不包含Key來完成此操作。這將隱式地將該樣式應用於該資源範圍內的所有控件。然後,您還需要顯式設置根列表框的ItemsPanel以垂直佈局。

<ListBox x:Name="LayoutRoot" Width="200" Height="400"> 
    <ListBox.Resources> 
     <Style TargetType="ListBox"> 
     <Setter Property="ItemsPanel"> 
      <Setter.Value> 
       <ItemsPanelTemplate> 
       <toolkit:WrapPanel/> 
       </ItemsPanelTemplate> 
      </Setter.Value> 
     </Setter> 
     </Style> 
    </ListBox.Resources> 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
     <StackPanel Orientation="Vertical"/> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
    <ListBoxItem> 
     <ListBox> 
      <ListBoxItem>11</ListBoxItem> 
      <ListBoxItem>12</ListBoxItem> 
     </ListBox> 
    </ListBoxItem> 
    <ListBoxItem> 
     <ListBox> 
      <ListBoxItem>21</ListBoxItem> 
      <ListBoxItem>22</ListBoxItem> 
     </ListBox> 
    </ListBoxItem> 
</ListBox> 
+0

我不太清楚這是如何適用於我的問題? – descf 2011-03-02 16:09:42

+0

爲了更具體一點,用於設置我發佈的樣式的XAML代碼不起作用 - 這就是問題所在 - 並且我不希望以同樣的方式隱式設置所有外部或內部列表框的樣式。 – descf 2011-03-02 16:29:36

+0

對不起,只是意識到你的XAMl是錯的。定影。 您可以在外部列表框的資源中創建一個隱式樣式。這樣每個內部列表框都會隱式地獲取該樣式。這應該可以解決您不需要在每個內部ListBox上明確設置樣式的問題。 – 2011-03-02 17:13:31

相關問題