2012-01-18 70 views
1

所以我一直在試圖樣式scrollviewer,以便我可以更改滾動條的外觀。但是我面臨的問題是,當我將scrollviewer樣式應用於ListBox時,我再也看不到內容了。Silverlight - 樣式ScrollViewer列表框

這是現在的風格,我有:(從默認不變的那一刻)

<Style x:Key="CustomScrollViewerStyle" TargetType="ScrollViewer"> 
    <Setter Property="HorizontalContentAlignment" Value="Left"/> 
    <Setter Property="VerticalContentAlignment" Value="Top"/> 
    <Setter Property="VerticalScrollBarVisibility" Value="Visible"/> 
    <Setter Property="Padding" Value="4"/> 
    <Setter Property="BorderThickness" Value="1"/> 
    <Setter Property="BorderBrush"> 
     <Setter.Value> 
      <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
       <GradientStop Color="#FFA3AEB9" Offset="0"/> 
       <GradientStop Color="#FF8399A9" Offset="0.375"/> 
       <GradientStop Color="#FF718597" Offset="0.375"/> 
       <GradientStop Color="#FF617584" Offset="1"/> 
      </LinearGradientBrush> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="ScrollViewer"> 
       <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="2"> 
        <Grid Background="{TemplateBinding Background}"> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="*"/> 
          <ColumnDefinition Width="Auto"/> 
         </Grid.ColumnDefinitions> 
         <Grid.RowDefinitions> 
          <RowDefinition Height="*"/> 
          <RowDefinition Height="Auto"/> 
         </Grid.RowDefinitions> 
         <ScrollContentPresenter x:Name="ScrollContentPresenter" Cursor="{TemplateBinding Cursor}" ContentTemplate="{TemplateBinding ContentTemplate}" Margin="{TemplateBinding Padding}"/> 
         <Rectangle Grid.Column="1" Fill="#FFE9EEF4" Grid.Row="1"/> 
         <ScrollBar x:Name="VerticalScrollBar" Grid.Column="1" IsTabStop="False" Maximum="{TemplateBinding ScrollableHeight}" Margin="0,-1,-1,-1" Minimum="0" Orientation="Vertical" Grid.Row="0" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" Value="{TemplateBinding VerticalOffset}" ViewportSize="{TemplateBinding ViewportHeight}" Width="18"/> 
         <ScrollBar x:Name="HorizontalScrollBar" Grid.Column="0" Height="18" IsTabStop="False" Maximum="{TemplateBinding ScrollableWidth}" Margin="-1,0,-1,-1" Minimum="0" Orientation="Horizontal" Grid.Row="1" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" Value="{TemplateBinding HorizontalOffset}" ViewportSize="{TemplateBinding ViewportWidth}"/> 
        </Grid> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

而且我的實際列表框XAML是:

<Grid x:Name="LayoutRoot" Background="Transparent" Height="250"> 
    <ListBox x:Name="iListBox" DataContext="{Binding}" ItemsSource="{Binding Path=ListVM.MyCollection}" 
      BorderBrush="Transparent" Background="Transparent" 
      ItemContainerStyle="{StaticResource ListBoxItemStyle1}"> 
     <ListBox.Template> 
      <ControlTemplate TargetType="ItemsControl"> 
       <ScrollViewer Style="{StaticResource CustomScrollViewerStyle}"/> 
      </ControlTemplate> 
     </ListBox.Template> 
     <ListBox.ItemTemplate > 
      <DataTemplate > 
       <Grid Background="Transparent" Loaded="Grid_Loaded"> 
        <IReviewerList1:MyCollectionDataItem /> 
       </Grid> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 
</Grid> 

目前,所有我看到的是一個滾動條和沒有dataItems了。想知道我做錯了什麼?任何幫助都會很棒。

謝謝

回答

3

問題是ListBox不知道在哪裏注入它的Items。如果在樣式ScrollViewer中插入ItemsPresenter,則應再次顯示這些項目。

<ListBox.Template> 
    <ControlTemplate TargetType="ItemsControl"> 
     <ScrollViewer Style="{StaticResource CustomScrollViewerStyle}"> 
      <!-- I'm not sure if the correct name is necessary, or if 
       it's just for applying visual states --> 
      <ItemsPresenter x:Name="itemsPresenter" /> 
     </ScrollViewer> 
    </ControlTemplate> 
</ListBox.Template> 
+0

乾杯,工作一種享受。這讓我感到困惑。 – TBD 2012-01-18 14:07:36