【问题标题】:How to generically repeat the style of a listboxitem in Silverlight / Windows phone 7如何在 Silverlight / Windows phone 7 中一般地重复列表框的样式
【发布时间】:2012-07-16 00:28:53
【问题描述】:

我有一个列表框,我需要重复样式以使所有列表框项的样式相同。只有占位符会改变。例如,以下列表框项具有三个元素 - 图像、标题文本和描述文本。我已经设计好了。现在我需要为我遵循的列表框项应用相同的样式。目前我正在对所有不正确的项目进行复制粘贴。

我可以通过 ListBoxTemplate 和 DataTemplate 做到这一点,但我需要在 .cs 文件中编写我不想要的代码。帮我怎么实现模板效果?

这是上述列表框项的代码。

<ListBoxItem>
    <Grid Height="80">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="80"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Image Grid.Column="0" Source="/Images/dark/appbar.magnify.png"/>
        <StackPanel Grid.Column="1">
            <TextBlock Text="Item heading" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
            <TextBlock Text="item description" TextWrapping="Wrap" Style="{StaticResource PhoneTextSubtleStyle}"/>
        </StackPanel>
    </Grid>
</ListBoxItem>

我需要为我添加的所有列表框项中的图像、标题文本和内容文本提供占位符。如何做到这一点?

【问题讨论】:

  • 为什么必须将 dataTemplate 放在 .cs 文件中? DataTemplates 在 XAML 中作为资源很好地存在。
  • @MBen:是吗?我不知道那个。让我挖。有什么例子可以指点我吗?

标签: c# silverlight windows-phone-7 xaml listbox


【解决方案1】:

这是实现它的方法:

<Page.Resources>
    <DataTemplate  x:Key="ListTemplate">
        <Grid Height="80">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="80"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <Image Grid.Column="0" Source="/Images/dark/appbar.magnify.png"/>
            <StackPanel Grid.Column="1">
                <TextBlock Text="{Binding ItemHeading}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
                <TextBlock Text="{Binding ItemDescription}" TextWrapping="Wrap" Style="{StaticResource PhoneTextSubtleStyle}"/>
            </StackPanel>
        </Grid>
    </DataTemplate>
</Page.Resources>
<Grid>
    <ListBox ItemTemplate="{StaticResource ListTemplate}" ItemsSource="{Binding YourList}">


    </ListBox>
</Grid>

您可以将资源放在 App.XAML 中,以便所有页面都可以访问它,并且可以在应用程序中的所有 ListBox 上使用它。请注意,YourList 中的元素应具有 ItemHeaderItemDescription 属性

【讨论】:

  • 谢谢。应用模板后如何将值(图像源、内容标题和描述)连接到列表框项?
  • 图片都是一样的,其他的就用普通装订吧。 WPF 将在 Source 列表的 DataContext 中找到它。我会更新我的代码。
  • 再次感谢您的评论。但我最终会从 cs 文件中传递 Yourlist 对吗?
  • 那么 YourList 将包含在您的 DataContext 中。您可以在 XAML 或 .cs 文件中使用 DataContext ¨
  • 我很贪心:),你能回答我刚刚发布的这个问题吗 - stackoverflow.com/questions/11340687/…
【解决方案2】:

您可以像这样创建数据项模板

<DataTemplate x:Key="DataTemplate1">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="auto"/>
                    <ColumnDefinition Width="auto"/>
                    <ColumnDefinition Width="auto"/>
                </Grid.ColumnDefinitions>
                <Image Grid.Column="0" Source="{Binding Image}" Width="10" Height="10"/>
                <TextBlock Grid.Column="1" Text="{Binding ID}"/>
                <TextBlock Grid.Column="2" Text="{Binding content}"/>
            </Grid>
        </DataTemplate>

然后将此数据模板绑定到列表,然后将项目绑定到列表.. :) 您可以将列表集合与类绑定

您可以创建一个包含三个变量 image、id 和 content 的类,以便您可以制作该类的列表并绑定到列表

【讨论】:

    【解决方案3】:

    创建/使用ListItem ItemTemplate

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-05
      • 1970-01-01
      • 2011-05-23
      • 1970-01-01
      相关资源
      最近更新 更多