У меня есть собственный стиль ListBox:
<phone:PhoneApplicationPage.Resources>
<Style x:Key="LayoutsListItemStyle" TargetType="ListBoxItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Grid Height="170" Width="170" Margin="0,0,20,20">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="LayoutStates">
<VisualState x:Name="BeforeUnloaded"/>
<VisualState x:Name="BeforeLoaded"/>
<VisualState x:Name="AfterLoaded"/>
</VisualStateGroup>
<VisualStateGroup x:Name="SelectionStates">
<VisualState x:Name="Unselected"/>
<VisualState x:Name="Selected">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderThickness)" Storyboard.TargetName="border">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<Thickness>4</Thickness>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="SelectedUnfocused"/>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Border x:Name="border" Width="170" Height="170" BorderBrush="{StaticResource PhoneAccentBrush}">
<Grid>
<Image Source="{Binding ThumbnailPath}" Width="170" Height="170" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</phone:PhoneApplicationPage.Resources>
и
<ListBox x:Name="LayoutsList" ItemContainerStyle="{StaticResource LayoutsListItemStyle}" ItemsSource="{Binding}">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<toolkit:WrapPanel Orientation="Horizontal" MaxWidth="410" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
, который отображает границу над выбранным элементом списка (при выборе вручную).Я хотел бы, чтобы элементы в списке работали как переключатели, а первый элемент в списке выбирался по умолчанию.
Я пытаюсь установить SelectedIndex списка, например, так:
private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
{
// Loads a list of available Layouts to a ListBox
XDocument layoutSummary = XDocument.Load("Content/LayoutSummary.xml");
var layouts =
from elem in layoutSummary.Descendants("ComicLayout")
select new ComicLayout
{
Name = (string)elem.Attribute("Name").Value,
FriendlyName = (string)elem.Attribute("FriendlyName").Value,
ThumbnailPath = "Content/LayoutIcons/" + (string)elem.Attribute("Name").Value + ".png"
};
LayoutsList.DataContext = layouts;
LayoutsList.SelectedIndex = 1;
}
но, похоже, он ничего не делает.
Как программно выбрать первый (или любой другой) элемент в привязанном к данным ListBox?
РЕДАКТИРОВАТЬ
Оказывается, что SelectedIndex на самом деле работает, и я могу управлять им и извлекать данные из ListBox, как я хочу.
Так что я думаю, что вопрос будет:
Как программно вызвать изменение VisualState для элемента списка?