2012-03-28 34 views
1

還在學習WPF ....感謝您的任何幫助。ListView DataTemplate,ControlTemplate和Style

有什麼辦法來重構這樣:

<ListBox Name="lbEvents" 
       VerticalAlignment="Stretch" 
       SelectionMode="Multiple" 
       Loaded="lbCenterEvents_Loaded" 
       HorizontalAlignment="Stretch" 
       BorderBrush="Transparent" 
       Background="Transparent" 
       SelectionChanged="lbCenterEvents_SelectionChanged" 
       ItemContainerStyle="{StaticResource KioskCheckboxListItemContainer}"> 
      <ListBox.Resources> 
       <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" /> 
       <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" /> 
       <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" /> 
      </ListBox.Resources> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <CheckBox Grid.Column="0" 
         Margin="0,10,0,0" 
         Padding="5,30,5,10" 
         DockPanel.Dock="Top" 
         Style="{StaticResource KioskCheckBox}" 
         Background="{StaticResource brshSecondaryColor}" 
         FontSize="26" 
         HorizontalAlignment="Stretch" 
         IsChecked="{Binding Path=IsSelected, RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}}" 
         Content="{Binding DisplayDescriptionForKiosk}"> 
        </CheckBox> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 

弄成這個樣子:

<ListBox Name="lbEvents" Style="{StaticResource MyFinalListBox}" 
       VerticalAlignment="Stretch" 
       SelectionMode="Multiple" 
       Loaded="lbCenterEvents_Loaded" 
       HorizontalAlignment="Stretch" 
       BorderBrush="Transparent" 
       Background="Transparent" /> 

只是想獲得一個想法......我不應該需要精確代碼,僞代碼應該是足夠的(我希望),在此先感謝。

編輯:我在問這是因爲我試圖找到一種方法來做到這一點與StaticResources最少量的引用。我意識到我可以抽出模板和樣式,但我希望有人能告訴我如何將它減少到一個StaticResource。

+0

對於風格你想對所有ListBoxs使用樣式的TargetType = 「{x:類型的ListViewItem}」>中的App.xaml – Paparazzi 2012-03-28 22:07:43

回答

0

是你想(像)

<UserControl> 
    <UserControl.Resources> 
     <DataTemplate x:Key="MyItemTemplate" DataType="{x:Type MyDataType}"> 
      <CheckBox Grid.Column="0" 
       Margin="0,10,0,0" 
       Padding="5,30,5,10" 
       DockPanel.Dock="Top" 
       Style="{StaticResource KioskCheckBox}" 
       Background="{StaticResource brshSecondaryColor}" 
       FontSize="26" 
       HorizontalAlignment="Stretch" 
       IsChecked="{Binding Path=IsSelected, RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}}" 
       Content="{Binding DisplayDescriptionForKiosk}"> 
      </CheckBox> 
     </DataTemplate> 
     <Style x:Key="MyFinalListBox" TargetType="{x:Type ListBox}"> 
      <Setter Property="SelectionMode" Value="Multiple" /> 
      ... put more properties here 
     </Style> 
    </UserControl.Resources> 
</UserControl> 

<ListBox Name="lbEvents" 
     ItemTemplate="{StaticResource MyItemTemplate}" 
     Style="{StaticResource MyFinalListBox}" 
     VerticalAlignment="Stretch" 
     Loaded="lbCenterEvents_Loaded" 
     HorizontalAlignment="Stretch" 
     BorderBrush="Transparent" 
     Background="Transparent" /> 
相關問題