2012-04-27 33 views

回答

8

是的,您需要修改ItemContainerStyle屬性中的GridViewItem樣式。

<GridView> 
    <GridView.ItemContainerStyle> 
     <Style TargetType="GridViewItem"> 
      <Setter 
       Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="GridViewItem"> 
         <Border x:Name="OuterContainer"> 
          <VisualStateManager.VisualStateGroups> 
           <VisualStateGroup x:Name="CommonStates"> 
            <VisualState x:Name="Normal" /> 
            <VisualState x:Name="PointerOver"> 
             <Storyboard> 
              <DoubleAnimation Storyboard.TargetName="PointerOverBorder" Storyboard.TargetProperty="Opacity" Duration="0" To="1" /> 
              <ObjectAnimationUsingKeyFrames Storyboard.TargetName="SelectionBackground" Storyboard.TargetProperty="Fill"> 
               <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ListViewItemSelectedPointerOverBorderBrush}" /> 
              </ObjectAnimationUsingKeyFrames> 
              <ObjectAnimationUsingKeyFrames Storyboard.TargetName="SelectedBorder" Storyboard.TargetProperty="Stroke"> 
               <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ListViewItemSelectedPointerOverBorderBrush}" /> 
              </ObjectAnimationUsingKeyFrames> 
              <ObjectAnimationUsingKeyFrames Storyboard.TargetName="SelectedEarmark" Storyboard.TargetProperty="Fill"> 
               <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource ListViewItemSelectedPointerOverBorderBrush}" /> 
              </ObjectAnimationUsingKeyFrames> 
             </Storyboard> 
            </VisualState> 
            <VisualState x:Name="Pressed"> 
             <Storyboard> 
              <TapDownThemeAnimation TargetName="ContentContainer" /> 
             </Storyboard> 
            </VisualState> 
            <VisualState x:Name="Disabled"> 
             <Storyboard> 
              <DoubleAnimation Storyboard.TargetName="contentPresenter" Storyboard.TargetProperty="Opacity" Duration="0" To="{StaticResource ListViewItemDisabledOpacity}" /> 
             </Storyboard> 
            </VisualState> 
           </VisualStateGroup> 
           <VisualStateGroup x:Name="FocusStates"> 
            <VisualState x:Name="Focused"> 
             <Storyboard> 
              <DoubleAnimation Duration="0" To="1" Storyboard.TargetProperty="Opacity" Storyboard.TargetName="FocusVisual" /> 
             </Storyboard> 
            </VisualState> 
            <VisualState x:Name="Unfocused" /> 
            <VisualState x:Name="PointerFocused" /> 
           </VisualStateGroup> 
           <VisualStateGroup x:Name="SelectionHintStates"> 
            <VisualStateGroup.Transitions> 
             <VisualTransition To="NoSelectionHint" GeneratedDuration="0:0:0.65" /> 
            </VisualStateGroup.Transitions> 
            <VisualState x:Name="VerticalSelectionHint"> 
             <Storyboard> 
              <SwipeHintThemeAnimation TargetName="SelectionBackground" ToVerticalOffset="25" ToHorizontalOffset="0" /> 
              <SwipeHintThemeAnimation TargetName="ContentBorder" ToVerticalOffset="25" ToHorizontalOffset="0" /> 
              <SwipeHintThemeAnimation TargetName="SelectedCheckMark" ToVerticalOffset="25" ToHorizontalOffset="0" /> 
              <DoubleAnimation Storyboard.TargetName="HintGlyph" Storyboard.TargetProperty="Opacity" Duration="0" To="1" /> 
             </Storyboard> 
            </VisualState> 
            <VisualState x:Name="HorizontalSelectionHint"> 
             <Storyboard> 
              <SwipeHintThemeAnimation TargetName="SelectionBackground" ToHorizontalOffset="-25" ToVerticalOffset="0" /> 
              <SwipeHintThemeAnimation TargetName="ContentBorder" ToHorizontalOffset="-25" ToVerticalOffset="0" /> 
              <SwipeHintThemeAnimation TargetName="SelectedCheckMark" ToHorizontalOffset="-25" ToVerticalOffset="0" /> 
              <DoubleAnimation Storyboard.TargetName="HintGlyph" Storyboard.TargetProperty="Opacity" Duration="0" To="1" /> 
             </Storyboard> 
            </VisualState> 
            <VisualState x:Name="NoSelectionHint" /> 
           </VisualStateGroup> 
           <VisualStateGroup x:Name="SelectionStates"> 
            <VisualState x:Name="Selecting"> 
             <Storyboard> 
              <DoubleAnimation Storyboard.TargetName="SelectionBackground" Storyboard.TargetProperty="Opacity" Duration="0" To="1" /> 
              <DoubleAnimation Storyboard.TargetName="SelectedBorder" Storyboard.TargetProperty="Opacity" Duration="0" To="1" /> 
              <DoubleAnimation Storyboard.TargetName="SelectingGlyph" Storyboard.TargetProperty="Opacity" Duration="0" To="1" /> 
              <DoubleAnimation Storyboard.TargetName="HintGlyphBorder" Storyboard.TargetProperty="Opacity" Duration="0" To="1" /> 
             </Storyboard> 
            </VisualState> 
            <VisualState x:Name="Selected"> 
             <Storyboard> 
              <DoubleAnimation Storyboard.TargetName="SelectionBackground" Storyboard.TargetProperty="Opacity" Duration="0" To="1" /> 
              <DoubleAnimation Storyboard.TargetName="SelectedBorder" Storyboard.TargetProperty="Opacity" Duration="0" To="1" /> 
              <DoubleAnimation Storyboard.TargetName="SelectedCheckMark" Storyboard.TargetProperty="Opacity" Duration="0" To="1" /> 
             </Storyboard> 
            </VisualState> 
            <VisualState x:Name="Unselecting"> 
             <Storyboard> 
              <DoubleAnimation Storyboard.TargetName="HintGlyphBorder" Storyboard.TargetProperty="Opacity" Duration="0" To="1" /> 
             </Storyboard> 
            </VisualState> 
            <VisualState x:Name="Unselected"> 
             <Storyboard> 
              <DoubleAnimation Storyboard.TargetName="HintGlyphBorder" Storyboard.TargetProperty="Opacity" Duration="0" To="1" /> 
             </Storyboard> 
            </VisualState> 
            <VisualState x:Name="SelectedUnfocused"> 
             <Storyboard> 
              <DoubleAnimation Storyboard.TargetName="SelectionBackground" Storyboard.TargetProperty="Opacity" Duration="0" To="1" /> 
              <DoubleAnimation Storyboard.TargetName="SelectedBorder" Storyboard.TargetProperty="Opacity" Duration="0" To="1" /> 
              <DoubleAnimation Storyboard.TargetName="SelectedCheckMark" Storyboard.TargetProperty="Opacity" Duration="0" To="1" /> 
             </Storyboard> 
            </VisualState> 
           </VisualStateGroup> 
           <VisualStateGroup x:Name="DragStates"> 
            <VisualStateGroup.Transitions> 
             <VisualTransition To="NotDragging" GeneratedDuration="0:0:0.650" /> 
            </VisualStateGroup.Transitions> 
            <VisualState x:Name="NotDragging" /> 
            <VisualState x:Name="Dragging"> 
             <Storyboard> 
              <DoubleAnimation Storyboard.TargetName="InnerDragContent" Storyboard.TargetProperty="Opacity" Duration="0" To="{StaticResource ListViewItemDragOpacity}" /> 
              <DragItemThemeAnimation TargetName="InnerDragContent" /> 
              <FadeOutThemeAnimation TargetName="SelectedCheckMarkOuter" /> 
              <FadeOutThemeAnimation TargetName="SelectedBorder" /> 
             </Storyboard> 
            </VisualState> 
            <VisualState x:Name="DraggingTarget"> 
             <Storyboard> 
              <DropTargetItemThemeAnimation TargetName="OuterContainer" /> 
             </Storyboard> 
            </VisualState> 
            <VisualState x:Name="MultipleDraggingPrimary"> 
             <Storyboard> 
              <!-- These two Opacity animations are required - the FadeInThemeAnimations 
             on the same elements animate an internal Opacity. --> 
              <DoubleAnimation Storyboard.TargetName="MultiArrangeOverlayBackground" Storyboard.TargetProperty="Opacity" Duration="0" To="1" /> 
              <DoubleAnimation Storyboard.TargetName="MultiArrangeOverlayText" Storyboard.TargetProperty="Opacity" Duration="0" To="1" /> 
              <DoubleAnimation Storyboard.TargetName="InnerDragContent" Storyboard.TargetProperty="Opacity" Duration="0" To="{StaticResource ListViewItemDragOpacity}" /> 
              <FadeInThemeAnimation TargetName="MultiArrangeOverlayBackground" /> 
              <FadeInThemeAnimation TargetName="MultiArrangeOverlayText" /> 
              <DragItemThemeAnimation TargetName="InnerDragContent" /> 
              <FadeOutThemeAnimation TargetName="SelectedCheckMarkOuter" /> 
              <FadeOutThemeAnimation TargetName="SelectedBorder" /> 
             </Storyboard> 
            </VisualState> 
            <VisualState x:Name="MultipleDraggingSecondary"> 
             <Storyboard> 
              <FadeOutThemeAnimation TargetName="ContentContainer" /> 
             </Storyboard> 
            </VisualState> 
           </VisualStateGroup> 
           <VisualStateGroup x:Name="ReorderHintStates"> 
            <VisualStateGroup.Transitions> 
             <VisualTransition To="NoReorderHint" GeneratedDuration="0:0:0.65" /> 
            </VisualStateGroup.Transitions> 
            <VisualState x:Name="NoReorderHint" /> 
            <VisualState x:Name="BottomReorderHint"> 
             <Storyboard> 
              <DragOverThemeAnimation TargetName="ReorderHintContent" ToOffset="{StaticResource ListViewItemReorderHintOffset}" Direction="Bottom" /> 
             </Storyboard> 
            </VisualState> 
            <VisualState x:Name="TopReorderHint"> 
             <Storyboard> 
              <DragOverThemeAnimation TargetName="ReorderHintContent" ToOffset="{StaticResource ListViewItemReorderHintOffset}" Direction="Top" /> 
             </Storyboard> 
            </VisualState> 
            <VisualState x:Name="RightReorderHint"> 
             <Storyboard> 
              <DragOverThemeAnimation TargetName="ReorderHintContent" ToOffset="{StaticResource ListViewItemReorderHintOffset}" Direction="Right" /> 
             </Storyboard> 
            </VisualState> 
            <VisualState x:Name="LeftReorderHint"> 
             <Storyboard> 
              <DragOverThemeAnimation TargetName="ReorderHintContent" ToOffset="{StaticResource ListViewItemReorderHintOffset}" Direction="Left" /> 
             </Storyboard> 
            </VisualState> 
           </VisualStateGroup> 
           <VisualStateGroup x:Name="DataVirtualizationStates"> 
            <VisualState x:Name="DataAvailable" /> 
            <VisualState x:Name="DataPlaceholder"> 
             <Storyboard> 
              <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PlaceholderTextBlock" Storyboard.TargetProperty="Visibility" Duration="0"> 
               <DiscreteObjectKeyFrame KeyTime="0"> 
                <DiscreteObjectKeyFrame.Value> 
                 <Visibility>Visible</Visibility> 
                </DiscreteObjectKeyFrame.Value> 
               </DiscreteObjectKeyFrame> 
              </ObjectAnimationUsingKeyFrames> 
              <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PlaceholderRect" Storyboard.TargetProperty="Visibility" Duration="0"> 
               <DiscreteObjectKeyFrame KeyTime="0"> 
                <DiscreteObjectKeyFrame.Value> 
                 <Visibility>Visible</Visibility> 
                </DiscreteObjectKeyFrame.Value> 
               </DiscreteObjectKeyFrame> 
              </ObjectAnimationUsingKeyFrames> 
             </Storyboard> 
            </VisualState> 
           </VisualStateGroup> 
          </VisualStateManager.VisualStateGroups> 
          <Grid x:Name="ReorderHintContent" Background="Transparent"> 
           <Path x:Name="SelectingGlyph" Opacity="0" Data="F1 M133.1,17.9 L137.2,13.2 L144.6,19.6 L156.4,5.8 L161.2,9.9 L145.6,28.4 z" Fill="{StaticResource ListViewItemHighlightBrush}" Height="13" Stretch="Fill" Width="15" HorizontalAlignment="Right" Margin="0,5.5,5.5,0" VerticalAlignment="Top" /> 
           <Border x:Name="ContentContainer"> 
            <!-- This extra wrapper grid is necessary because rendertransforms set by the reorder hint animations 
           will be lost when ContentContainer becomes a LTE --> 
            <Grid x:Name="InnerDragContent"> 
             <Border x:Name="HintGlyphBorder" Height="40" Width="40" HorizontalAlignment="Right" VerticalAlignment="Top" Opacity="0" Margin="4"> 
              <Path x:Name="HintGlyph" Opacity="0" Data="F1 M133.1,17.9 L137.2,13.2 L144.6,19.6 L156.4,5.8 L161.2,9.9 L145.6,28.4 z" Fill="{StaticResource ListViewItemCheckHintGlyphBrush}" Height="13" Stretch="Fill" Width="15" HorizontalAlignment="Right" Margin="0,5.5,5.5,0" VerticalAlignment="Top" /> 
             </Border> 
             <Rectangle x:Name="PointerOverBorder" IsHitTestVisible="False" Opacity="0" Fill="{StaticResource ListViewItemPointerOverBrush}" Margin="1" /> 
             <Rectangle x:Name="FocusVisual" IsHitTestVisible="False" Opacity="0" StrokeThickness="2" Stroke="{StaticResource ListViewItemKeyboardFocusBrush}" /> 
             <Rectangle x:Name="SelectionBackground" Margin="4" Fill="{StaticResource ListViewItemHighlightBrush}" Opacity="0" /> 
             <Border x:Name="ContentBorder" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Margin="4"> 
              <Grid> 
               <ContentPresenter x:Name="contentPresenter" ContentTransitions="{TemplateBinding ContentTransitions}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Margin="{TemplateBinding Padding}" /> 
               <!-- The 'Xg' text simulates the amount of space one line of text will occupy. 
              In the DataPlaceholder state, the Content is not loaded yet so we 
              approximate the size of the item using placeholder text. --> 
               <TextBlock x:Name="PlaceholderTextBlock" Visibility="Collapsed" Text="Xg" Foreground="{x:Null}" Margin="{TemplateBinding Padding}" IsHitTestVisible="False" /> 
               <Rectangle x:Name="PlaceholderRect" Visibility="Collapsed" Fill="{StaticResource ListViewItemPlaceholderRectBrush}" IsHitTestVisible="False" /> 
               <Rectangle x:Name="SelectedBorder" IsHitTestVisible="False" Opacity="0" Stroke="{StaticResource ListViewItemHighlightBrush}" StrokeThickness="{StaticResource GridViewItemSelectedBorderThickness}" /> 
              </Grid> 
             </Border> 
             <Border x:Name="SelectedCheckMarkOuter" IsHitTestVisible="False" HorizontalAlignment="Right" VerticalAlignment="Top" Padding="{TemplateBinding BorderThickness}" Margin="4"> 
              <Grid x:Name="SelectedCheckMark" Opacity="0" Height="40" Width="40"> 
               <Path x:Name="SelectedEarmark" Data="M0,0 L40,0 L40,40 z" Fill="{StaticResource ListViewItemHighlightBrush}" Stretch="Fill" /> 
               <Path Data="F1 M133.1,17.9 L137.2,13.2 L144.6,19.6 L156.4,5.8 L161.2,9.9 L145.6,28.4 z" Fill="{StaticResource ListViewItemCheckGlyphBrush}" Height="13" Stretch="Fill" Width="15" HorizontalAlignment="Right" Margin="0,5.5,5.5,0" VerticalAlignment="Top" FlowDirection="LeftToRight" /> 
              </Grid> 
             </Border> 
             <Rectangle x:Name="MultiArrangeOverlayBackground" IsHitTestVisible="False" Opacity="0" Fill="{StaticResource ListViewItemDragBackgroundBrush}" Margin="4" /> 
             <TextBlock x:Name="MultiArrangeOverlayText" IsHitTestVisible="False" Opacity="0" Text="{Binding TemplateSettings.DragItemsCount, RelativeSource={RelativeSource Mode=TemplatedParent}}" TextWrapping="Wrap" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="4"> 
         <TextBlock.Style> 
          <Style TargetType="TextBlock"> 
           <Setter Property="Foreground" Value="White" /> 
           <Setter Property="FontSize" Value="56" /> 
           <Setter Property="FontFamily" Value="{StaticResource ContentFontFamily}" /> 
           <Setter Property="FontWeight" Value="Light" /> 
           <Setter Property="HorizontalAlignment" Value="Left" /> 
           <Setter Property="VerticalAlignment" Value="Bottom" /> 
           <Setter Property="Margin" Value="12,0,0,0" /> 
           <Setter Property="TextWrapping" Value="Wrap" /> 
           <Setter Property="TextTrimming" Value="WordEllipsis" /> 
          </Style> 
         </TextBlock.Style> 
             </TextBlock> 
            </Grid> 
           </Border> 
          </Grid> 
         </Border> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </GridView.ItemContainerStyle> 
</GridView> 

請注意,系統控件的默認樣式在操作系統版本之間有所不同。通過搜索TargetType="GridViewItem",可以在"c:\Program Files (x86)\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP\10.0.10240.0\Generic\themeresources.xaml"(或themeresources.xaml文件中的某些此類位置)中找到Windows 10擴展(請注意,平臺默認呈現具有簡化視覺樹的項目以提高性能)GridViewItem的樣式。

+0

感謝您的答覆完美的解決方案。你能給我一個樣品嗎?謝謝。 – 2012-04-28 14:04:51

+5

我解決這樣: 2012-04-28 14:36:10

+0

噢,其抽頭效果確實你意思是?修改GridViewItem樣式將允許您刪除高亮。在面板上將IsHitTestVisible設置爲false可能會禁用所有點擊等,並讓它們冒泡到父級UIElement。 – 2012-04-28 14:40:58

1

在「GridViewItemStyle」中刪除visualstate「PointerOver」和「PointerOverPressed」的故事板將禁用指針懸停和按動畫。

樣本源代碼:http://files.cnblogs.com/Tealcwu/ItemContainerStyleSelectorDemo.zip

請參閱http://www.cnblogs.com/Tealcwu/archive/2012/11/07/2759132.html,最後一節。

+0

感謝您發佈您的答案!請務必仔細閱讀[自助推廣常見問題](http://stackoverflow.com/faq#promotion)。另請注意,每次鏈接到您自己的網站/產品時,您都必須*發佈免責聲明。 – 2012-11-07 22:00:54

6

當只需要只讀網格視圖時,IsHitTestVisible =「False」將是最快的解決方案。

4

這是W8.1

<Style x:Key="GridViewItemStyle" TargetType="GridViewItem"> 
<Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}"/> 
<Setter Property="FontSize" Value="{ThemeResource ControlContentThemeFontSize}"/> 
<Setter Property="Background" Value="Transparent"/> 
<Setter Property="TabNavigation" Value="Local"/> 
<Setter Property="IsHoldingEnabled" Value="True"/> 
<Setter Property="Margin" Value="0,0,2,2"/> 
<Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="GridViewItem"> 
      <ContentPresenter /> 
     </ControlTemplate> 
    </Setter.Value> 
</Setter>