2009-08-09 26 views
8

GridView görünümünde WPF ListView var ve satır vurgularının herhangi bir izini kaldırmak istiyorum. Bu değişiklik vurgulamak çoğunu uzaklaştırmak için yardımcı olurken, yine de göründüğü yatay çubuk kaldırmaz,WPF ListView/GridView öğesinin kaldırılması vurgulama krom

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

Ancak:

Bu kod kullanışlı bir parça bu sitede bir cevap bulunabilir fare ListView satırının üzerinde hareket eder. Nasıl kaldırabilirim?

Düğmeyle ilgili benzer sorunla uğraştım ve Button şablonunu kromunu kaldırarak değiştiren bir çözüm buldum.

Bu ListView/GridView durumunda, değiştirilecek ilgili krom ve şablonu bulamıyorum.

cevap

14

Windows SDK yüklü varsa, içinde (eğer örnekleri yüklü varsayarak) Tüm varsayılan stilleri için XAML kaynak bulabilirsiniz:

% ProgramFiles% \ Microsoft SDK'leri \ Windows \ v6.1 \ Örnekler \ WPFSamples.zip

Zip dosyası, varsayılan stillerin kaynağını içeren AeroTheme, LunaTheme vb. Içeren bir klasör Core içerir. Ne yazık ki, bu dosyalar oldukça büyüktür (Aero için 8500 satır) ve çok iyi yapılandırılmamış veya biçimlendirilmemiş (IMO).

bir Listviewıtem için varsayılan kontrol şablon şuna benzer:

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

tüm vurgulama kaldırmak için Yapabileceğiniz en iyi şey bu sadece (belki tek Sınır içinde) GridViewRowPresenter içerir sahibi ile ControlTemplate yerine muhtemelen . Kontrol devre dışı bırakıldığında öğeleri grileşen Tetikleyiciyi dahil etmeyi unutmayın.

+0

Üstteki vurgu olmalı! Burada şablona bakıyordum: http://msdn.microsoft.com/en-us/library/ms788717.aspx ve farklı bir tema için olması gerektiğinden, çubuğu açıklayamadım. – Tony

+0

UpperHighlight dikdörtgenin suçlu olduğunu onaylayabilirim. Teşekkürler! – Tony

+2

İnanılmaz ... sadece WPF'de tek bir vurgu elemanından kurtulmak için bir stili tamamen iptal etmem gerekiyor. – aqua

0

Kodunuzu kullanarak hiç bir satır göremiyorum. Şu anda varsayılan temanız nedir? Luna, Aero, vb? Seninki benimkilerden farklı olabilir, bu yüzden kromda bir fark. ListView'unuzda başka belirli ayarlar var mı?

Style Snooper veya Show Me The Template, gördüğünüz çizgi için sorumlu görsel öğeyi izlemenize yardımcı olabilir. Ayrıca, istediğiniz etkiyi elde etmek için re-templating sizin ListView ile ilgilenebilirsiniz. Bir Windows PC önünde değilim

+0

Bu Vista teması, Ben cam etkileri olduğu için Aero olduğuna inanıyorum. Gerçekten de XP'deki insanlar vurgulama çubuğunu görmez. – Tony

8

şu anda bunu test etmek ama onunla eğer benim Window.Resources aşağıdaki

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

emin değil koyarak sabit süzer ile benzer bir sorunu vardı Yine de liste listenizi ile çalışacaktır.

+1

Bazı bloglar ve anwers bu yönteme işaret ediyor, ancak bir nedenden dolayı, hiçbir zaman benim için çalışmadı. – Tony

+3

Teşekkürler! Pencere hedeflerime StyleType = "ListViewItem" ile yazdığımda bu benim için çalıştı. Ayrıca, metin rengimin arka plan rengine (ve dolayısıyla kaybolana) geçişini önlemek için SystemColors.HighlightTextBrushKey öğesini SystemColors.WindowTextColor olarak ayarlamak için bir satır ekledim. –

+0

Benim için Gridview ileOUTView üzerinde çalışır. Ama Gridview ile değil. – Paparazzi

İlgili konular