Выделите выбранный элемент в списке - PullRequest
1 голос
/ 22 февраля 2012

Я занимаюсь разработкой приложения Silverlight со списком

<ListBox x:Name="_list_collection"
    SelectionChanged="SelectionChanged"
    ScrollViewer.VerticalScrollBarVisibility="Auto"
    SelectedItem="{Binding SelectedItem, Mode=TwoWay}"
    ItemsSource="{Binding Collection, Mode=TwoWay}"
    ItemTemplate="{StaticResource ScheduleListItemDataTemplate}"
    ItemContainerStyle="{StaticResource ScheduleListItemContainerDataTemplate}" Margin="10" />

Источник предметов привязан к этому

 public ObservableCollection<ScheduleDto> Collection
 {
     get { return _collection; }
     set
     {
         _collection = value;
         OnPropertyChanged("Collection");
     }
 }

И выбранный элемент привязан к

public ScheduleDto SelectedItem
{
    get { return _selectedItem; }
    set
    {
        _selectedItem = value;
        OnPropertyChanged("SelectedItem");
    }
}

Элемент выбирается, потому что я вижу некоторые подробности о нем в отдельном окне. Моя единственная проблема в том, что этот пункт не выделен (синий фон). Я попробовал это, добавив обработчик события selectiong, который выглядит так

private void SelectionChanged(object sender, SelectionChangedEventArgs e)
{
   ListBoxItem selectedItem = (ListBoxItem)_list_collection.ItemContainerGenerator.ContainerFromIndex(_list_collection.SelectedIndex);

    VisualStateManager.GoToState(selectedItem, "Selected", true); 
}

Но не повезло ... Любой совет?

Edit:

Это ItemTemplate

<DataTemplate x:Key="ScheduleListItemDataTemplate">
    <Grid VerticalAlignment="Stretch"
          d:DesignHeight="100">
        <Grid.Resources>
            <Converters1:ScheduleStatusConverter x:Key="ScheduleStatusConverter"/>
            <Converters1:DateToStringConverter x:Key="DateToStringConverter"/>
        </Grid.Resources>
        <Grid.RowDefinitions>
            <RowDefinition Height="50" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="250" />
            <ColumnDefinition Width="Auto"/>
        </Grid.ColumnDefinitions>
        <TextBlock Grid.ColumnSpan="3"
                    HorizontalAlignment="Stretch"
                   Text="{Binding Name}"         
                    Foreground="{Binding Converter={StaticResource ScheduleStatusConverter}}"
                   FontFamily="{StaticResource LabelTextStyle}"
                   FontSize="19" TextTrimming="WordEllipsis" VerticalAlignment="Center"/>
        <Grid Grid.Row="1">
            <Grid.RowDefinitions>
                <RowDefinition  />
                <RowDefinition />
            </Grid.RowDefinitions>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Path=[lblCreatedBy], Source={StaticResource Translations}}" VerticalAlignment="Center"/>
                <TextBlock Text=":" Margin="2,0,2,0" VerticalAlignment="Center"/>
                <TextBlock TextWrapping="Wrap"
                   Text="{Binding CreatedBy}"
                   FontFamily="{StaticResource LabelTextStyle}"
                   FontSize="16"
                   VerticalAlignment="Center"
                   Grid.Column="2"
                   Margin="0"
                   Grid.Row="1"
                   HorizontalAlignment="Right">
                    <TextBlock.Foreground>
                        <SolidColorBrush Color="{StaticResource FactualTextStyle}" />
                    </TextBlock.Foreground>
                </TextBlock>
            </StackPanel>
            <StackPanel Orientation="Horizontal" Grid.Row="1">
                <TextBlock Text="{Binding Path=[lblCoachingViewGridCreatedDate], Source={StaticResource Translations}}" VerticalAlignment="Center"/>
                <TextBlock Text=":" Margin="2,0,2,0" VerticalAlignment="Center"/>
                <TextBlock TextWrapping="Wrap"
                   Text="{Binding CreatedAt,Converter={StaticResource DateToStringConverter}}"
                   FontSize="16"
                   VerticalAlignment="Center"

                   HorizontalAlignment="Right"/>
            </StackPanel>
        </Grid>
        <Grid Grid.Column="2"
                   Margin="0"
                   Grid.Row="1" Visibility="{Binding}">
            <Grid.RowDefinitions>
                <RowDefinition  />
                <RowDefinition />
            </Grid.RowDefinitions>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Path=[lblUpdatedBy], Source={StaticResource Translations}}" VerticalAlignment="Center"/>
                <TextBlock Text=":" Margin="2,0,2,0" VerticalAlignment="Center"/>
                <TextBlock TextWrapping="Wrap"
                   Text="{Binding UpdatedBy}"
                   FontFamily="{StaticResource LabelTextStyle}"
                   FontSize="16"
                   VerticalAlignment="Center"
                   Grid.Column="2"
                   Margin="0"
                   Grid.Row="1"
                   HorizontalAlignment="Right">
                    <TextBlock.Foreground>
                        <SolidColorBrush Color="{StaticResource FactualTextStyle}" />
                    </TextBlock.Foreground>
                </TextBlock>
            </StackPanel>
            <StackPanel Orientation="Horizontal" Grid.Row="1">
                <TextBlock Text="{Binding Path=[lblUpdatedDate], Source={StaticResource Translations}}" VerticalAlignment="Center"/>
                <TextBlock Text=":" Margin="2,0,2,0" VerticalAlignment="Center"/>
                <TextBlock TextWrapping="Wrap"
                   Text="{Binding UpdatedAt,Converter={StaticResource DateToStringConverter}}"
                   FontSize="16"
                   VerticalAlignment="Center"

                   HorizontalAlignment="Right"/>
            </StackPanel>
        </Grid>
    </Grid>
</DataTemplate>

Даже если я удалю шаблон стиля, первый элемент не будет выбран: /

1 Ответ

2 голосов
/ 22 февраля 2012

Я нашел ответ ... Спасибо @Haris Hasan

Существует Visual stete с именем SelectedUnfocused.Просто скопировал свойства из Selected и все отлично работает

<VisualState x:Name="SelectedUnfocused">
   <Storyboard>
      <DoubleAnimation Duration="0"
          To=".75"
          Storyboard.TargetProperty="Opacity"
          Storyboard.TargetName="fillColor2" />
      <ColorAnimation Duration="0"
          To="#FF8DC5F9"
          Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)"
          Storyboard.TargetName="fillColor2"
          d:IsOptimized="True" />
      <ColorAnimation Duration="0"
          To="#FFBCC0C0"
          Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)"
          Storyboard.TargetName="fillColor"
          d:IsOptimized="True" />
       <DoubleAnimation Duration="0"
          To="1"
          Storyboard.TargetProperty="(Rectangle.RadiusX)"
          Storyboard.TargetName="fillColor2"
          d:IsOptimized="True" />
    </Storyboard>
</VisualState>
...