2010-03-09 2 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

Вы должны сделать свой Ключ строкой, например <Style x:Key="myGridStyle" TargetType="{x:Type ScrollViewer}">, а затем вызвать этот стиль для требуемых сеток использовать его. Кроме того, если вы задаете только TargetType, а не Key, тогда он будет использоваться по умолчанию для этого типа везде, если вы не переопределите его.

+0

@Smoore Я подумал об этом, но мне нужно добавить несколько ключей, чтобы добавить к одной сетке, нет ли способа собрать все их в один ключ? – Coesy

+0

Да, это так. Возможно, вы могли бы сделать эту Gird UserControl и просто построить эту Grid там, как вам нравится, а затем использовать этот элемент управления везде, где вам нужно в течение всего проекта. –

+0

Поскольку они представляют собой отдельные элементы управления, все они должны иметь отдельные ключи, поэтому единственный способ сгруппировать их в один ключ - объединить их в один элемент управления. Являются ли все эти элементы управления частью элемента управления ListView? Если да, почему бы вам просто не создать один стиль ListView со всеми этими вещами, определенными внутри него? –

Смежные вопросы