2012-04-27 10 views

उत्तर

8

हां, आपको ItemContainerStyle प्रॉपर्टी में ग्रिड व्यूइटम शैली को संशोधित करने की आवश्यकता है।

<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> 

ध्यान दें कि सिस्टम नियंत्रण की डिफ़ॉल्ट शैली ओएस के संस्करणों के बीच बदलती है। विंडोज 10 का विस्तार हुआ (ध्यान दें कि मंच प्रदर्शन को बेहतर बनाने के लिए डिफ़ॉल्ट रूप से सरलीकृत दृश्य पेड़ वाले आइटम प्रस्तुत करता है) GridViewItem की शैली (या themeresources.xaml फ़ाइल में ऐसी कुछ जगह) TargetType="GridViewItem" पर खोज करके पाई जा सकती है।

+0

उत्तर के लिए धन्यवाद पर सही समाधान है। क्या आप मुझे नमूना प्रदान कर सकते हैं? धन्यवाद। –

+5

मैं इस तरह से हल हो:

+0

ओह, जो नल प्रभाव किया तुम्हारा मतलब है? GridViewItem शैली को संशोधित करने से आप हाइलाइट को हटाने की अनुमति देंगे। पैनल पर गलत करने के लिए IsHitTestVisible सेट करना संभवतः सभी क्लिक इत्यादि अक्षम करता है और उन्हें मूल UIElement पर बबल करने देता है। –

1

"ग्रिड व्यूइटेम स्टाइल" में विजुअलस्टेट "पॉइंटर ओवर" और "पॉइंटर ओवरवरेड" के स्टोरीबोर्ड को हटाकर पॉइंटर होवर और दबाए गए एनिमेशन अक्षम हो जाएंगे।

नमूना स्रोत कोड: http://files.cnblogs.com/Tealcwu/ItemContainerStyleSelectorDemo.zip

http://www.cnblogs.com/Tealcwu/archive/2012/11/07/2759132.html, पिछले अनुभाग को देखें।

+0

आपका उत्तर पोस्ट करने के लिए धन्यवाद ! कृपया सावधानीपूर्वक [स्व-संवर्धन पर अक्सर पूछे जाने वाले प्रश्न] (http://stackoverflow.com/faq#promotion) को पढ़ना सुनिश्चित करें। यह भी ध्यान रखें कि यह * आवश्यक * है कि जब भी आप अपनी साइट/उत्पाद से लिंक करते हैं तो आप एक अस्वीकरण पोस्ट करते हैं। –

6

IsHitTestVisible = "गलत" सबसे तेज़ समाधान होगा जब केवल पढ़ने-योग्य ग्रिड दृश्य की आवश्यकता होती है।

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> 

संबंधित मुद्दे