Silverlight - остановка подсветки в списке - PullRequest
15 голосов
/ 11 февраля 2009

У меня есть список серебряного света, и я хочу удалить подсветку изменения цвета, которая появляется, когда пользователь выбирает элемент в списке.

По умолчанию, когда элемент выбран, он выделяет элемент голубым цветом.

Как я могу остановить это?

В качестве дополнительного вопроса, как мне настроить это для любого произвольного цвета?

Спасибо.

Ответы [ 3 ]

20 голосов
/ 11 февраля 2009

Вы можете сделать это, настроив существующий шаблон элемента управления для элемента ListBox. Самый простой способ сделать это - запустить Expression Blend, щелкнуть правой кнопкой мыши ListBoxItem, перейти к Edit Control Parts (Template) и выбрать Edit a Copy ... затем настроить цвет Fill прямоугольников fillColor и fillColor2, как требуется. *

Xaml ниже устанавливает прозрачный цвет наведения мыши ListBoxItem, а выбранный цвет - ярко-зеленый, но вы можете настроить его под свои нужды:

<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 Rectangle указывает цвет, который будет использоваться, когда пользователь наведет курсор на ListBoxItem. В приведенном выше коде я установил прозрачность, чтобы при наведении указателя мыши на ListBoxItem не отображался цвет.

fillColor2 указывает цвет, который будет использоваться при выборе ListBoxItem. В приведенном выше коде я указал # FF00FF00, поэтому при выборе ListBoxItem цвет будет ярко-зеленым.

В вашей ситуации вы бы установили для свойства Fill прямоугольника fillColor2 значение «Прозрачный», чтобы имитировать отсутствие цвета при выборе пользователем элемента.

6 голосов
/ 11 января 2012

Если вам не нужен выбор, вы можете рассмотреть возможность использования ItemsControl вместо ListBox.
(ItemsControl - более простая версия того же элемента управления).

из http://forums.silverlight.net/post/140375.aspx

0 голосов
/ 04 января 2010
<ListBox.ItemContainerStyle>
    <Style TargetType="ListBoxItem">
        <Setter Property="Focusable" Value="false"></Setter>
    </Style>
</ListBox.ItemContainerStyle>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...