2015-05-16 5 views
2

У меня есть ListView, где я меняющийся цвет переднего плана выбранного элемента:Как изменить цвет переднего плана из ListView выбранного элемента

<ListView ItemsSource="{Binding Levels}" 
          x:Name="LvLevels" SelectionChanged="LvLevels_SelectionChanged"> 

    <ListView.ItemContainerStyle> 
     <Style TargetType="ListViewItem"> 
      <Setter Property="Template"> 
       <Setter.Value> 
       <ControlTemplate TargetType="ListViewItem"> 
        <Grid>            
         <VisualStateManager.VisualStateGroups> 
         <VisualStateGroup x:Name="CommonStates"> 
          <VisualState x:Name="Normal"/> 
         </VisualStateGroup> 
         <VisualStateGroup x:Name="SelectionStates"> 
           <VisualState x:Name="Unselected"> 
           <Storyboard> 
            <ColorAnimation Duration="0" Storyboard.TargetName="myback" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" To="Red"/>                 
           </Storyboard> 
           </VisualState> 
           <VisualState x:Name="SelectedUnfocused"> 
           <Storyboard> 
            <ColorAnimation Duration="0" Storyboard.TargetName="myback" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" To="#16C8E0"/> 
           </Storyboard> 
           </VisualState> 
          </VisualStateGroup> 
          </VisualStateManager.VisualStateGroups> 
          <Border x:Name="myback" Background="Transparent"> 
          <ContentPresenter Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}"/> 
          </Border> 
         </Grid> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
       </Style> 
      </ListView.ItemContainerStyle> 

    <ListView.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="Auto" /> 
       <ColumnDefinition Width="*" /> 
       </Grid.ColumnDefinitions> 

       <Image Grid.Column="0" Source="../Assets/icons/uno.png" 
        Margin="10 0 0 0"/> 
       <TextBlock x:Name="tblock" Text="{Binding}" Grid.Column="1" FontSize="30" />      
      </Grid> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

Как я могу изменить цвет переднего плана для TextBlock выбранного элемента в моем случае ?

Я пытался использовать:

<ColorAnimation Duration="0" Storyboard.TargetName="tblock" 
    Storyboard.TargetProperty="(Foreground).(SolidColorBrush.Color)" 
    To="White"/> 

но получил исключение:

Exception = {"No installed components were detected.\r\n\r\nCannot resolve TargetName tblock."} 

ответ

0

Вы получаете исключение, потому что стиль ListViewItem не может знать о структуре/элементов в его шаблоне элемента.
Самый простой способ - переопределить стиль контейнера ListViewItem. Вам нужно указать также VisualState для состояния «Selected» в «SelectionStates». Там вы можете анимировать свойство переднего плана какого-либо элемента (ContentPresenter не имеет его, поэтому я использовал ContentControl).

 <ListView.ItemContainerStyle> 
      <Style TargetType="ListViewItem"> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="ListViewItem"> 
          <Grid> 
           <VisualStateManager.VisualStateGroups> 
            <VisualStateGroup x:Name="CommonStates"> 
             <VisualState x:Name="Normal"/> 
            </VisualStateGroup> 
            <VisualStateGroup x:Name="SelectionStates"> 
             <VisualState x:Name="Selected"> 
              <Storyboard> 
               <ColorAnimation Duration="0" Storyboard.TargetName="contentControl" Storyboard.TargetProperty="(Control.Foreground).(SolidColorBrush.Color)" To="GreenYellow"/> 
              </Storyboard> 
             </VisualState> 
             <VisualState x:Name="Unselected"> 
              <Storyboard> 
               <ColorAnimation Duration="0" Storyboard.TargetName="myback" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" To="Red"/> 
              </Storyboard> 
             </VisualState> 
             <VisualState x:Name="SelectedUnfocused"> 
              <Storyboard> 
               <ColorAnimation Duration="0" Storyboard.TargetName="myback" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" To="#16C8E0"/> 
              </Storyboard> 
             </VisualState> 
            </VisualStateGroup> 
           </VisualStateManager.VisualStateGroups> 
           <Border x:Name="myback" Background="Transparent"> 
            <ContentControl x:Name="contentControl" Foreground="{TemplateBinding Foreground}" Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}"/> 
           </Border> 
          </Grid> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </ListView.ItemContainerStyle> 
+0

«Selected» не работает, пожалуйста, помогите мне, что –

+0

@kushal «Selected» является одним из визуальных состояний для класса 'ListViewItem'. Поскольку ваша проблема может быть вызвана чем-то другим, я предлагаю вам создать новый вопрос SO. –

Смежные вопросы