2010-12-03 9 views
28

Liste kutusunun seçilen öğeyi vurgulamasına nasıl izin verilemediğini bulmakta sorun yaşıyorum. Öğeyi vurgulamak için bir tetikleyici eklemediğimi biliyorum. Hala oldukça yeni WPF =)Liste kutusunda vurgulamayı nasıl devre dışı bırakabilirim, ancak seçim devam ettirilsin mi?

Teşekkürler!

<ListBox Name="CartItems" ItemsSource="{Binding}" 
     ItemTemplate="{StaticResource TicketTemplate}" 
     Grid.Row="3" Grid.ColumnSpan="9" Background="Transparent" 
     BorderBrush="Transparent"> 
</ListBox> 

cevap

44

Geç cevap, ama orada çok daha iyi ve daha basit çözüm:

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

Bu sadece bir itemscontrol gibi görünen bir LisBox olmasını sağlar, ancak seçim için desteği vardır.

Düzenleme:nasıl sizin pencereler teması, yalnızca bu liste kutusu ve çocuklar için (biz aslında ListboxItem hedeflemek istediğiniz) bir başka deyişle
Bu değişiklikler gösterirse "sisteminin renkleri", çalışır. Örneğin, ListboxItem üzerinde gezinmek genellikle koyu mavi bir arka plan verir, ancak burada onu şeffaf (HighlightBrushKey) olarak ayarlıyoruz.

Düzenleme (2016 30 Haziran):
da yorumlarda @packoman için InactiveSelectionHighlightBrushKey

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

Teşekkür yeniden tanımlamak gerekir, bu artık yeterli değildir son Windows sürümü için görünüyor

+1

güzel ve basit. teşekkürler – Marek

+0

Merhaba, bunun nasıl çalıştığını bana açıklar mısınız?Bana oldukça kafa karıştırdı çünkü yaptığınız her şeyin, bu kod parçacığında herhangi bir değişiklik yapmadan, liste kutusunda daha sonra kullanılacak katı renk fırçalarını tanımlamak olduğunu düşündüm. –

+1

@ClementHoang Bir açıklama ekledim. –

0

Sen yeniden şablonu için ListBoxItem olacaktır. Varsayılan şablonda, IsSelected özelliği true olduğunda kendisini vurgulayan bir tetikleyiciye sahiptir. Bu tetikleyiciye sahip olmayan bir şablon oluşturmanız yeterli.

+0

(http://msdn.microsoft.com/en-us/library/cc278062%28VS.95%29.aspx) ListBox ve ListBoxItem ait şablonları listeleyen bir sayfası. Onları kullanabilirsin. – decyclone

4

çıkarmadan size bir şey seçtiyseniz bilmiyorum, ama burada (çok ince olduğunu) WhiteSmoke kullanan kontrol şablonun bir versiyonu olarak tamamen yerine, çok garip hissediyor vurgulayarak Blue

<Window.Resources> 
    <Style x:Key="ListBoxItemStyle1" TargetType="{x:Type ListBoxItem}"> 
     <Setter Property="Background" Value="Transparent"/> 
     <Setter Property="HorizontalContentAlignment" Value="{Binding HorizontalContentAlignment, 
      RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/> 
     <Setter Property="VerticalContentAlignment" Value="{Binding VerticalContentAlignment, 
      RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/> 
     <Setter Property="Padding" Value="2,0,0,0"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type ListBoxItem}"> 
        <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" 
          BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" 
          Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true"> 
         <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
          SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" 
          VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
        </Border> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsSelected" Value="true"> 
          <Setter Property="Background" TargetName="Bd" Value="WhiteSmoke"/> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</Window.Resources> 

<Grid x:Name="LayoutRoot"> 
    <ListBox HorizontalAlignment="Left" VerticalAlignment="Top" ItemContainerStyle="{DynamicResource ListBoxItemStyle1}"> 
     <ListBoxItem Content="Item1"/> 
     <ListBoxItem Content="Item2"/> 
     <ListBoxItem Content="Item3"/> 
     <ListBoxItem Content="Item4"/> 
     <ListBoxItem Content="Item5"/> 
     <ListBoxItem Content="Item6"/> 
    </ListBox> 
</Grid> 
1

Özellikler sekmesinde, 2 seçeneğe sahip, Doğru ve yanlış olan bir Etkin Alan vardır. Bunu yanlış olarak çevirerek, Liste Kutusu beyaz kalır ve seçim mümkün değildir. Sadece bunu anladım!

1

WP8 uygulamasında yaptığım bir numaradan bahsediyorum.

Üzerinde şeffaf bir çerçeve görüntüsü ekledim (resmin kenarlığı görüldü, resim çerçevesi gibi düşünülüyordu). Kaydırma işlevseldi, herhangi bir manipülasyon olayı, Listbox öğelerinin anilonger seçilmemesini sağladı.

<Grid 
     Grid.Row="0" 
     Margin="10,15" 
     Background="#FF008F88"> 
     <ListBox 
      x:Name="listBox_content" 
      Margin="20,15" 
      VirtualizingStackPanel.VirtualizationMode="Recycling"> 
     </ListBox> 

     <!-- TV image, middle is transparent so the ListBox can be seen --> 
     <Image 
       x:Name="image_tv" 
       Source="/Assets/Images/tvFrame.png" 
       Stretch="Fill"/> 
     <!----> 
    </Grid> 

Bu, Doldurma için ayarlanmış tam saydam bir görüntü ile çalışabilir. İşte

38
 <ListBox.ItemContainerStyle> 
      <Style TargetType="ListBoxItem"> 
       <Setter Property="IsSelected" Value="{Binding Content.IsSelected, Mode=TwoWay, RelativeSource={RelativeSource Self}}"/> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="ListBoxItem"> 
          <ContentPresenter/> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </ListBox.ItemContainerStyle> 
+0

Bir çekicilik çalışır - Teşekkürler Wayne –

+0

@Baboon tarafından cevap, Telefon 8.1'de çalışmıyor - bu bir yok. Harika. – samjudson

+0

Bu yanıtlar zaten 'ListBox.ItemContainerStyle' – JwJosefy

İlgili konular