2010-03-09 187 views
1

我一直在这个时候把我的头发撕掉,希望有人能帮助我。在这一个承担我。将样式应用到gridview中

我有一些样式在我的App.xaml中转换gridview,代码看起来像这样。

<Application.Resources> 

    <Style x:Key="{x:Static GridView.GridViewScrollViewerStyleKey}" 
     TargetType="{x:Type ScrollViewer}"> 
     <Setter Property="Focusable" 
      Value="false"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type ScrollViewer}"> 
        <Grid Background="{TemplateBinding Background}" 
         SnapsToDevicePixels="true"> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="*"/> 
          <ColumnDefinition Width="Auto"/> 
         </Grid.ColumnDefinitions> 
         <Grid.RowDefinitions> 
          <RowDefinition Height="*"/> 
          <RowDefinition Height="Auto"/> 
         </Grid.RowDefinitions> 
         <DockPanel Margin="{TemplateBinding Padding}"> 
          <ScrollViewer DockPanel.Dock="Left" 
             HorizontalScrollBarVisibility="Hidden" 
             VerticalScrollBarVisibility="Hidden" 
             Focusable="false"> 
           <GridViewHeaderRowPresenter Margin="2,0,2,0" 
                 Columns="{Binding Path=TemplatedParent.View.Columns,RelativeSource={RelativeSource TemplatedParent}}" 
                 ColumnHeaderContainerStyle="{Binding Path=TemplatedParent.View.ColumnHeaderContainerStyle,RelativeSource={RelativeSource TemplatedParent}}" 
                 ColumnHeaderTemplate="{Binding Path=TemplatedParent.View.ColumnHeaderTemplate,RelativeSource={RelativeSource TemplatedParent}}" 
                 ColumnHeaderTemplateSelector="{Binding Path=TemplatedParent.View.ColumnHeaderTemplateSelector,RelativeSource={RelativeSource TemplatedParent}}" 
                 AllowsColumnReorder="{Binding Path=TemplatedParent.View.AllowsColumnReorder,RelativeSource={RelativeSource TemplatedParent}}" 
                 ColumnHeaderContextMenu="{Binding Path=TemplatedParent.View.ColumnHeaderContextMenu,RelativeSource={RelativeSource TemplatedParent}}" 
                 ColumnHeaderToolTip="{Binding Path=TemplatedParent.View.ColumnHeaderToolTip,RelativeSource={RelativeSource TemplatedParent}}" 
                 SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
          </ScrollViewer> 
          <ScrollContentPresenter Name="PART_ScrollContentPresenter" 
            KeyboardNavigation.DirectionalNavigation="Local" 
            Content="{TemplateBinding Content}" 
            ContentTemplate="{TemplateBinding ContentTemplate}" 
            CanContentScroll="{TemplateBinding CanContentScroll}" 
            SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
         </DockPanel> 

         <DockPanel Grid.Column="1" 
           Grid.Row="1" 
           Background="{Binding Path=Background,ElementName=PART_VerticalScrollBar}" 
           LastChildFill="false"> 
          <Rectangle DockPanel.Dock="Left" 
            Width="1" 
            Fill="White" 
            Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"/> 
          <Rectangle DockPanel.Dock="Top" 
            Height="1" 
            Fill="White" 
            Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"/> 
         </DockPanel> 
        </Grid> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

    <Style TargetType="{x:Type GridViewHeaderRowPresenter}"> 
     <Setter Property="Height" Value="80" /> 
     <Setter Property="LayoutTransform"> 
      <Setter.Value> 
       <TransformGroup> 
        <RotateTransform Angle="-90" /> 
        <ScaleTransform ScaleY="-1" /> 
       </TransformGroup> 
      </Setter.Value> 
     </Setter> 
    </Style> 

    <Style TargetType="{x:Type GridViewRowPresenter}"> 
     <Setter Property="LayoutTransform"> 
      <Setter.Value> 
       <TransformGroup> 
        <RotateTransform Angle="-90" /> 
        <ScaleTransform ScaleY="-1" /> 
       </TransformGroup> 
      </Setter.Value> 
     </Setter> 
    </Style> 



    <Style TargetType="{x:Type ListView}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ListView"> 
        <Border Name="Border" BorderThickness="1" BorderBrush="Black" Background="White"> 
         <ScrollViewer Style="{DynamicResource {x:Static GridView.GridViewScrollViewerStyleKey}}"> 
          <ItemsPresenter /> 
         </ScrollViewer> 
        </Border> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsGrouping" Value="true"> 
          <Setter Property="ScrollViewer.CanContentScroll" Value="false"/> 
         </Trigger> 
         <Trigger Property="IsEnabled" Value="false"> 
          <Setter TargetName="Border" Property="Background" Value="White"/> 

         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 

      </Setter.Value> 
     </Setter> 
    </Style> 
    <Style TargetType="{x:Type GridViewColumnHeader}"> 
     <Setter Property="HorizontalContentAlignment" Value="Center"/> 
     <Setter Property="VerticalContentAlignment" Value="Center"/> 
      <Setter Property="BorderThickness" Value="0"/> 
     <Setter Property="Padding" Value="2,0,2,0"/> 
     <Setter Property="Template"> 
      <Setter.Value> 

       <ControlTemplate TargetType="{x:Type GridViewColumnHeader}"> 
        <Grid SnapsToDevicePixels="true"> 
         <Border x:Name="HeaderBorder" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="0,1,0,1"> 
          <Grid> 
           <Grid.RowDefinitions> 
            <RowDefinition MaxHeight="7"/> 
            <RowDefinition/> 
           </Grid.RowDefinitions> 
           <Rectangle Fill="#FFE3F7FF" x:Name="UpperHighlight" Visibility="Collapsed"/> 
           <Border Grid.RowSpan="2" Padding="{TemplateBinding Padding}"> 
            <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="0,0,0,1" x:Name="HeaderContent" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" RecognizesAccessKey="True"> 
             <ContentPresenter.LayoutTransform> 
              <TransformGroup> 
               <ScaleTransform ScaleY="-1" /> 
               <RotateTransform Angle="90" /> 
              </TransformGroup> 
             </ContentPresenter.LayoutTransform> 
            </ContentPresenter> 
           </Border> 
          </Grid> 
         </Border> 
         <Border Margin="1,1,0,0" x:Name="HeaderHoverBorder" BorderThickness="1,0,1,1"/> 
         <Border Margin="1,0,0,1" x:Name="HeaderPressBorder" BorderThickness="1,1,1,0"/> 

        </Grid> 
        <ControlTemplate.Triggers> 

         <Trigger Property="Height" Value="Auto"> 
          <Setter Property="MinHeight" Value="20"/> 
         </Trigger> 
         <Trigger Property="IsEnabled" Value="false"> 
          <Setter Property="Foreground" Value="Black"/> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 

    </Style> 
</Application.Resources> 

现在,这适用于我的网页上的所有gridviews,我将如何使这些样式适用于某些gridviews而不是其他人?我已经尝试了一百万种不同的方式,并且我确信我错过了一些明显的东西!,请帮助:-)

回答

0

您必须将Key设置为一个字符串,如<Style x:Key="myGridStyle" TargetType="{x:Type ScrollViewer}">,然后调用该样式作为所需的网格使用它。另外,如果你只设置了一个TargetType而不是一个Key,那么它就是这个Type的默认值,除非你覆盖它。

+0

@Smoore我的确在想这件事,但是我必须将很多密钥添加到一个网格中,难道没有办法将它们全部集中到一个密钥中吗? – Coesy 2010-03-09 16:17:36

+0

是的,就是。也许你可以把这个Gird做成一个UserControl,然后用你喜欢的方式构建这个Grid,然后在整个项目中随时随地使用这个控件。 – 2010-03-09 16:19:56

+0

由于它们是单独的控件,因此它们都必须具有单独的键,因此将它们组合成一个键的唯一方法是将它们全部组合到一个控件中。所有这些控件都是ListView控件的一部分吗?如果是这样,为什么你不能只拥有一个ListView风格,并在其中定义了所有这些东西? – 2010-03-09 16:28:33