Windows Phone 7 Silverlight DataTemplate HyperlinkButton content - PullRequest
1 голос
/ 14 марта 2011

Я пытаюсь создать список, который заполняется внешними данными, и у меня для него есть таблица данных.
Каждый элемент списка состоит из изображения и двух текстовых блоков и связан с определенной страницей.

Я пытаюсь сделать это, но когда я обертываю структуру HyperlinkButton, я просто получаю пустую страницу.

Я не знаю, делаю ли я что-то глупое неправильно илиневозможно иметь так много элементов в кнопке HyperlinkButton.Если это невозможно сделать таким образом, кто-нибудь может подсказать мне лучшее решение для этого?Вот код:

<Grid x:Name="ContentPanel" Margin="0,140,0,0" Background="White">
    <ListBox HorizontalAlignment="Stretch" Name="itemList" VerticalContentAlignment="Stretch">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <HyperlinkButton>
                    <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" MinWidth="480">
                        <Grid.Background>
                            <ImageBrush ImageSource="/app;component/Images/degradat_cela.png" Stretch="UniformToFill" AlignmentY="Top" AlignmentX="Left" />
                        </Grid.Background>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="35" />
                            <RowDefinition Height="35" />
                        </Grid.RowDefinitions>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="50" />
                            <ColumnDefinition Width="430*" />
                        </Grid.ColumnDefinitions>

                        <Border HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Height="38" Width="38" Grid.RowSpan="2" Grid.Column="0" Grid.Row="0" BorderThickness="1" BorderBrush="#FFFF003F" Padding="1">
                            <Image HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Name="listImage" Width="36" Height="36" Source="{Binding image}" />
                        </Border>
                        <TextBlock Margin="5 12 0 0" Grid.Column="1" Grid.Row="0" Name="title" Foreground="Black" Text="{Binding title}" FontWeight="Bold" FontSize="18" />
                        <TextBlock Margin="5 0 0 8" Grid.Column="1" Grid.Row="1" Name="description" Foreground="Black" Text="{Binding subtitle}" FontSize="14" />
                    </Grid>
                </HyperlinkButton>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</Grid>

Я также приму любые предложения, чтобы улучшить мой код, так как я новичок в .NET и, вероятно, не делаю вещи лучше всего!

1 Ответ

3 голосов
/ 14 марта 2011

Удалите HyperlinkButton и вместо этого используйте событие SelectionChanged объекта ListBox. Так что добавьте это свойство в свой ListBox:

SelectionChanged="myListBox_SelectionChanged"

Затем в вашем коде выполните это:

private void myListBox_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
{
    if ((sender as ListBox).SelectedIndex == -1)
        return;

    NavigationService.Navigate(new System.Uri(string.Format("/Drilldown.xaml?Index={0}",(sender as ListBox).SelectedIndex),System.UriKind.Relative));
}

Этот код предполагает развертывание страницы, которая использует строку запроса для изменения своего макета. Это только для примера. Если вместо индекса вы хотите сослаться на какое-либо свойство связанного элемента, вы можете вместо этого сделать что-то вроде этого (при условии свойства ID):

int itemID = ((sender as ListBox).SelectedItem as MyApp.Model.myItem).ID;
NavigationService.Navigate(new System.Uri(string.Format("/Drilldown.xaml?ID={0}",itemID),System.UriKind.Relative));
...