Лично я бы использовал кнопки с привязками команд, но я полагаю, вы могли бы начать так:
public MainPage()
{
InitializeComponent();
ObservableCollection<SampleData> dataSource = new ObservableCollection<SampleData>();
dataSource.Add(
new SampleData()
{
ImageUri = "Images/appbar.delete.rest.png",
Text = "Item1",
Description = "blablabla",
TargetUri = new Uri("Page1.xaml", UriKind.Relative)
});
dataSource.Add(
new SampleData()
{
ImageUri = "Images/appbar.delete.rest.png",
Text = "item2",
Description = "blablabla",
TargetUri = new Uri("Page2.xaml", UriKind.Relative)
});
dataSource.Add(
new SampleData()
{
ImageUri = "Images/appbar.download.rest.png",
Text = "Item3",
Description = "blablabla",
TargetUri = new Uri("Page3.xaml", UriKind.Relative)
});
this.list.ItemsSource = dataSource;
}
private void list_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
var data = list.SelectedItem as SampleData;
if (data == null)
{
return;
}
NavigationService.Navigate(data.TargetUri);
}
public class SampleData
{
public string Text { get; set; }
public string Description { get; set; }
public string ImageUri { get; set; }
public Uri TargetUri { get; set; }
}
* РЕДАКТИРОВАТЬ
Если вы хотите нажать элемент для навигации с помощью командВы можете сделать это следующим образом:
public class SampleData
{
public string Text { get; set; }
public string Description { get; set; }
public string ImageUri { get; set; }
public Uri TargetUri { get; set; }
public ICommand NavigateCommand { get; private set; }
public SampleData()
{
NavigateCommand =
new DelegateCommand(
() => NavigationService.Navigate(TargetUri);
}
}
Чтобы получить экземпляр NavigationService - вы можете реализовать его самостоятельно или просто использовать App.RootFrame для выполнения вызовов навигации.Вы бы определили привязки команд примерно так:
<ListBox.ItemTemplate>
<DataTemplate>
<Button
Command={Binding NavigateCommand}>
<Button.Template>
<ControlTemplate>
<StackPanel Orientation="Horizontal">
<Image Source="{Binding ImageUri}"
Stretch="None"
Height="100"/>
<StackPanel Width="360" >
<TextBlock Text="{Binding Text}"
Style="{StaticResource PhoneTextExtraLargeStyle}"/>
<TextBlock Text="{Binding Description}"
Style="{StaticResource PhoneTextSubtleStyle}"/>
</StackPanel>
</StackPanel>
</ControlTemplate>
</Button.Template>
</Button>
</DataTemplate>
</ListBox.ItemTemplate>