2009-02-10 14 views
15

Silverlight liste kutunuz var ve kullanıcı liste kutusunda bir öğe seçtiğinde oluşan renk değişimi vurgulamasını kaldırmak istiyorum.Silverlight - Bir liste kutusundaki önemli noktaları gösterme

Bir öğe seçildiğinde, varsayılan olarak öğeyi açık mavi renkte vurgular.

Bunun oluşmasını nasıl engelleyebilirim?

Bir yan soru olarak, bunu herhangi bir aritmetik renge nasıl özelleştirebilirim?

Teşekkürler.

cevap

20

Bunu, bir liste kutusu öğesi için varolan denetim şablonunu özelleştirerek yapabilirsiniz. Bunu yapmanın kolay yolu, Expression Blend'i açmak, bir ListBoxItem öğesini sağ tıklatmak, Denetim Bölümlerini Düzenleme (Şablon) 'a gidin ve Bir Kopyayı Düzenle ...' yi seçin, ardından fillColor ve fillColor2 dikdörtgenlerinin Dolgu rengini gerektiği gibi özelleştirin.

Xaml aşağıda ListBoxItem fareyle üzerine renkli şeffaf olmaya ayarlar ve seçilen renk yeşil parlak olması ancak bu ihtiyaçlarınıza özelleştirebilirsiniz:

<UserControl x:Class="SilverlightApplication2.Page" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows" 
    Width="400" Height="300" Background="#FF000000"> 
    <UserControl.Resources> 
    <Style x:Key="ListBoxItemStyleTransparent" TargetType="ListBoxItem"> 
     <Setter Property="Padding" Value="3"/> 
     <Setter Property="HorizontalContentAlignment" Value="Left"/> 
     <Setter Property="VerticalContentAlignment" Value="Top"/> 
     <Setter Property="Background" Value="Transparent"/> 
     <Setter Property="BorderThickness" Value="1"/> 
     <Setter Property="TabNavigation" Value="Local"/> 
     <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="ListBoxItem"> 
      <Grid Background="{TemplateBinding Background}"> 
       <vsm:VisualStateManager.VisualStateGroups> 
       <vsm:VisualStateGroup x:Name="CommonStates"> 
        <vsm:VisualState x:Name="Normal"/> 
        <vsm:VisualState x:Name="MouseOver"> 
        <Storyboard> 
         <DoubleAnimationUsingKeyFrames Storyboard.TargetName="fillColor" Storyboard.TargetProperty="Opacity"> 
         <SplineDoubleKeyFrame KeyTime="0" Value=".35"/> 
         </DoubleAnimationUsingKeyFrames> 
        </Storyboard> 
        </vsm:VisualState> 
        <vsm:VisualState x:Name="Disabled"> 
        <Storyboard> 
         <DoubleAnimationUsingKeyFrames Storyboard.TargetName="contentPresenter" Storyboard.TargetProperty="Opacity"> 
         <SplineDoubleKeyFrame KeyTime="0" Value=".55"/> 
         </DoubleAnimationUsingKeyFrames> 
        </Storyboard> 
        </vsm:VisualState> 
       </vsm:VisualStateGroup> 
       <vsm:VisualStateGroup x:Name="SelectionStates"> 
        <vsm:VisualState x:Name="Unselected"/> 
        <vsm:VisualState x:Name="Selected"> 
        <Storyboard> 
         <DoubleAnimationUsingKeyFrames Storyboard.TargetName="fillColor2" Storyboard.TargetProperty="Opacity"> 
         <SplineDoubleKeyFrame KeyTime="0" Value=".75"/> 
         </DoubleAnimationUsingKeyFrames> 
        </Storyboard> 
        </vsm:VisualState> 
       </vsm:VisualStateGroup> 
       <vsm:VisualStateGroup x:Name="FocusStates"> 
        <vsm:VisualState x:Name="Focused"> 
        <Storyboard> 
         <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetName="FocusVisualElement" Storyboard.TargetProperty="Visibility"> 
         <DiscreteObjectKeyFrame KeyTime="0"> 
          <DiscreteObjectKeyFrame.Value> 
          <Visibility>Visible</Visibility> 
          </DiscreteObjectKeyFrame.Value> 
         </DiscreteObjectKeyFrame> 
         </ObjectAnimationUsingKeyFrames> 
        </Storyboard> 
        </vsm:VisualState> 
        <vsm:VisualState x:Name="Unfocused"/> 
       </vsm:VisualStateGroup> 
       </vsm:VisualStateManager.VisualStateGroups> 
       <Rectangle x:Name="fillColor" IsHitTestVisible="False" Opacity="0" RadiusX="1" RadiusY="1" Fill="Transparent"/> 
       <Rectangle x:Name="fillColor2" IsHitTestVisible="False" Opacity="0" Fill="#FF00FF00" RadiusX="1" RadiusY="1"/> 
       <ContentPresenter HorizontalAlignment="Left" Margin="{TemplateBinding Padding}" x:Name="contentPresenter" Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}"/> 
       <Rectangle x:Name="FocusVisualElement" Visibility="Collapsed" Stroke="#FF6DBDD1" StrokeThickness="1" RadiusX="1" RadiusY="1"/> 
      </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
     </Setter> 
    </Style> 
    </UserControl.Resources> 
    <Grid x:Name="LayoutRoot" Background="White"> 
    <ListBox x:Name="ListBoxTest"> 
     <ListBoxItem Content="Some String" Style="{StaticResource ListBoxItemStyleTransparent}" /> 
    </ListBox> 
    </Grid> 
</UserControl> 

fillColor Dikdörtgen kullanılacak rengi belirtir Kullanıcı bir ListBoxItem üzerinde mouses. Yukarıdaki kodda bunu Şeffaf olarak ayarladım, böylece ListBoxItem üzerinde farenizi belirttiğinizde hiçbir renk görünmeyecek.

fillColor2, bir ListBoxItem seçildiğinde kullanılacak rengi belirtir. Yukarıdaki kodda # FF00FF00 belirttim, böylece bir ListBoxItem seçildiğinde renk parlak yeşil olacak.

Durumunuzda, kullanıcı bir öğeyi seçtiğinde hiçbir renk simülasyonu yapmak için fillColor2 Rectangle öğesinin Dolgu özelliğini Saydam olarak ayarlamanız gerekir.

+0

gelen bu ne yazık ki ben farklı öğeleri her türlü listbox doldurmak olarak programlama stili ayarlamak gerekir, çok iyi bir cevaptır. Belki de biraz veri templating hrmm kullanmam gerekiyor ... – JSmyth

+0

Cevabınız myListItem.Style = (Style) this.Resources ["ListBoxItemStyleTransparent"] ekleme ekleyerek çalıştı; Cevabınızı kabul edilen yanıt olarak işaretleyecektir :) – JSmyth

+1

Evet, bu stili size programsal olarak gönderme biçiminizdir. Stili birden çok .xaml dosyalarında kullanıyorsanız, dikkat edilmesi gereken bir başka nokta da, App.xaml içinde içinde bildirilmesidir. Daha sonra Application.Current.Resources ["ListBoxItemStyleTransparent"] ile başvuru yapabilirsiniz. –

-1
<ListBox.ItemContainerStyle> 
    <Style TargetType="ListBoxItem"> 
     <Setter Property="Focusable" Value="false"></Setter> 
    </Style> 
</ListBox.ItemContainerStyle> 
+2

"Odaklanabilir bir ListBoxItem özelliği değil" –

İlgili konular