Windows Phone 7 Silverlight DataTemplate HyperlinkBut​​ton内容

时间:2011-03-14 14:32:00

标签: silverlight windows-phone-7 datatemplate

我正在尝试创建一个由外部数据填充的列表,我有一个数据模板。
列表的每个元素都由一个图像和两个文本块组成,并链接到特定页面。

我正在尝试这样做但是当我用HyperlinkBut​​ton包装结构时,我只是得到一个空白页。

我不知道我是不是做了一些愚蠢的错误,或者在HyperlinkBut​​ton中不可能有这么多项目。如果不可能这样做,有人可以指导我做到最好的解决方案吗?这是代码:

<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 个答案:

答案 0 :(得分:3)

删除HyperlinkBut​​ton,改为使用ListBox的SelectionChanged事件。所以将此属性添加到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));