2009-08-09 21 views
8

को हटाकर मेरे पास ग्रिड व्यू व्यू के साथ WPF ListView है और मैं पंक्ति हाइलाइट के किसी भी निशान को हटाना चाहता हूं।WPF ListView/GridView हाइलाइट क्रोम

कोड का यह उपयोगी टुकड़ा इस साइट पर एक ही जवाब में पाया जा सकता:

 <ListView.ItemContainerStyle> 
     <Style TargetType="{x:Type ListViewItem}"> 
      <Setter Property="Control.Focusable" Value="False"/> 
      <Style.Triggers> 
       <Trigger Property="IsMouseOver" Value="True"> 
       <Setter Property="Background" Value="{x:Null}" /> 
       <Setter Property="BorderBrush" Value="{x:Null}" /> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </ListView.ItemContainerStyle> 

हालांकि, जबकि इस परिवर्तन को उजागर के सबसे दूर करने के लिए मदद करता है, यह क्षैतिज बार है कि अभी भी जब प्रकट होता है को दूर नहीं करता सूची सूची दृश्य पर माउस चलता है। मेरे द्वारा इसे कैसे दूर किया जाएगा?

मैंने बटन से जुड़े इसी समस्या से निपटाया है और एक समाधान मिला है जो इसके क्रोम को हटाकर बटन टेम्पलेट को बदलता है।

ListView/GridView के इस मामले में मैं संबंधित क्रोम और टेम्पलेट को बदलने में असमर्थ हूं।

उत्तर

14

आप Windows एसडीके स्थापित है, तो आप में सभी डिफ़ॉल्ट शैलियों (यह मानते हुए आप नमूने स्थापित) के लिए XAML स्रोत पा सकते हैं:

% ProgramFiles% \ Microsoft SDKs \ Windows \ v6.1 \ नमूने \ WPFSamples.zip

ज़िप फ़ाइल एक फ़ोल्डर कोर जो AeroTheme, LunaTheme आदि जो डिफ़ॉल्ट शैलियों के लिए स्रोत होते हैं शामिल हैं। दुर्भाग्य से ये फ़ाइलें बहुत बड़ी हैं (~ एयरो के लिए 8500 लाइनें) और बहुत अच्छी तरह से संरचित या स्वरूपित नहीं (आईएमओ)।

एक ListViewItem के लिए डिफ़ॉल्ट नियंत्रण टेम्पलेट इस तरह दिखता है:

<ControlTemplate TargetType="{x:Type ListViewItem}"> 
    <Border CornerRadius="2" SnapsToDevicePixels="True" 
      BorderThickness="{TemplateBinding BorderThickness}" 
      BorderBrush="{TemplateBinding BorderBrush}" 
      Background="{TemplateBinding Background}"> 
    <Border Name="InnerBorder" CornerRadius="1" BorderThickness="1"> 
     <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition MaxHeight="11" /> 
      <RowDefinition /> 
     </Grid.RowDefinitions> 

     <Rectangle Name="UpperHighlight" Visibility="Collapsed" Fill="#75FFFFFF" /> 
     <GridViewRowPresenter Grid.RowSpan="2" 
           VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
           SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" /> 
     </Grid> 
    </Border> 
    </Border> 

    <ControlTemplate.Triggers> 
    <Trigger Property="IsMouseOver" Value="True"> 
     <Setter Property="Background" Value="{StaticResource ListItemHoverFill}" /> 
     <Setter Property="BorderBrush" Value="#FFCCF0FF" /> 
     <Setter TargetName="UpperHighlight" Property="Visibility" Value="Visible" /> 
    </Trigger> 

    <Trigger Property="IsSelected" Value="True"> 
     <Setter Property="Background" Value="{StaticResource ListItemSelectedFill}" /> 
     <Setter Property="BorderBrush" Value="#FF98DDFB" /> 
     <Setter TargetName="InnerBorder" Property="BorderBrush" Value="#80FFFFFF" /> 
     <Setter TargetName="UpperHighlight" Property="Visibility" Value="Visible" /> 
     <Setter TargetName="UpperHighlight" Property="Fill" Value="#40FFFFFF" /> 
    </Trigger> 

    <MultiTrigger> 
     <MultiTrigger.Conditions> 
     <Condition Property="IsSelected" Value="True" /> 
     <Condition Property="Selector.IsSelectionActive" Value="False" /> 
     </MultiTrigger.Conditions> 

     <Setter Property="Background" Value="{StaticResource ListItemSelectedInactiveFill}" /> 
     <Setter Property="BorderBrush" Value="#FFCFCFCF" /> 
    </MultiTrigger> 

    <MultiTrigger> 
     <MultiTrigger.Conditions> 
     <Condition Property="IsSelected" Value="True" /> 
     <Condition Property="IsMouseOver" Value="True" /> 
     </MultiTrigger.Conditions> 

     <Setter Property="Background" Value="{StaticResource ListItemSelectedHoverFill}" /> 
     <Setter Property="BorderBrush" Value="#FF98DDFB" /> 
    </MultiTrigger> 

    <Trigger Property="IsEnabled" Value="False"> 
     <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" /> 
    </Trigger> 
    </ControlTemplate.Triggers> 
</ControlTemplate> 

सभी हाइलाइटिंग दूर करने के लिए आपका सबसे अच्छा शर्त शायद के साथ ही है कि बस GridViewRowPresenter (शायद एक भी सीमा में) भी शामिल है ControlTemplate को बदलने के लिए है । ट्रिगर को शामिल करना न भूलें जो नियंत्रण अक्षम होने पर आइटम को ग्रेज़ करता है।

+0

ऊपरी हाइलाइट होना चाहिए! मैं यहां टेम्पलेट देख रहा था: http://msdn.microsoft.com/en-us/library/ms788717.aspx और चूंकि यह एक अलग विषय के लिए होना चाहिए, मैं बार को समझा नहीं सकता था। – Tony

+0

मैं पुष्टि कर सकता हूं कि अपर हाइलाइट आयताकार अपराधी था। धन्यवाद! – Tony

+2

कमाल ... केवल डब्ल्यूपीएफ में मुझे एक ही हाइलाइट तत्व से छुटकारा पाने के लिए पूरी तरह से शैली को ओवरराइड करना पड़ा है। – aqua

0

अपने कोड का उपयोग कर, मुझे कोई भी लाइन नहीं दिखाई दे रही है। अभी आपकी डिफ़ॉल्ट थीम क्या है? लुना, एयरो, इत्यादि? यह हो सकता है कि आपका मेरा से अलग है, इसलिए क्रोम में एक अंतर है। क्या आपके ListView पर कोई अन्य विशेष सेटिंग्स हैं?

Style Snooper या Show Me The Template आपको जो रेखा दिखाई दे रही है उसके लिए जिम्मेदार दृश्य तत्व को ट्रैक करने में आपकी सहायता कर सकती है। आप जिस प्रभाव को चाहते हैं उसे पाने के लिए आपको re-templating में अपने ListView में रुचि भी हो सकती है।

+0

यह Vista विषय है, मेरा मानना ​​है कि यह एरो है क्योंकि मेरे पास ग्लास प्रभाव हैं। वास्तव में एक्सपी पर लोगों को हाइलाइट बार नहीं दिखता है। – Tony

8

मैं एक विंडोज पीसी के सामने नहीं कर रहा हूँ अब इस अधिकार का परीक्षण करने लेकिन मैं listboxes के साथ एक समान मुद्दा जो मैं अपने Window.Resources में निम्नलिखित

<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" /> 
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" /> 

सुनिश्चित नहीं हैं कि अगर यह रखकर तय किया था हालांकि आपकी सूचीदृश्य के साथ काम करेंगे।

+1

कई ब्लॉग और टावर इस विधि को इंगित करते हैं, लेकिन किसी कारण से, यह मेरे लिए कभी काम नहीं करता है। – Tony

+3

धन्यवाद! यह मेरे लिए काम करता है जब मैंने इसे अपने लक्ष्य संसाधनों में स्टाइल लक्ष्य टाइप = "ListViewItem" के साथ रखा है। मैंने SystemColors.HighlightTextBrushKey को SystemColors.WindowTextColor पर सेट करने के लिए एक पंक्ति भी जोड़ा, अन्यथा मेरे टेक्स्ट रंग को पृष्ठभूमि रंग (और इस प्रकार गायब होने) से स्विच करने से रोकने के लिए। –

+0

मेरे लिए यह ListView के साथ ग्रिडव्यू के साथ काम करता है। लेकिन ग्रिडव्यू के साथ नहीं। – Paparazzi

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