XAML:在listview中添加精选项目

时间:2016-10-26 22:55:43

标签: c# wpf xaml win-universal-app

我遇到这个设计问题,我无法弄明白该怎么做,或者甚至不知道它叫什么,为什么我这么难以谷歌呢。

我有一个ListView,想要添加一个"精选"在那里的项目,右上角有一个三角形角,带有文字"精选"。像这样enter image description here

以下是示例代码

XAML

<ScrollViewer HorizontalAlignment="Stretch">
    <ListView x:Name="lstproductstype" HorizontalAlignment="Stretch" VirtualizingStackPanel.VirtualizationMode="Recycling" SelectionMode="None" IsActiveView="True"  Background="Transparent">
        <ListView.ItemsPanel>
            <ItemsPanelTemplate>
                <WrapGrid Orientation="Horizontal" MaximumRowsOrColumns="2" />
            </ItemsPanelTemplate>
        </ListView.ItemsPanel>
        <ListView.ItemContainerStyle>
            <Style TargetType="ListViewItem">
                <Setter Property="Padding" Value="-1"/>
                <Setter Property="Margin" Value="-2"/>
            </Style>
        </ListView.ItemContainerStyle>
        <ListView.ItemTemplate>
            <DataTemplate>
                <Border Width="590" Background="White" Height="220" BorderBrush="Gray" BorderThickness="0,0,1,1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                    <Grid>
                        <Grid.RowDefinitions>
                        </Grid.RowDefinitions>
                        <StackPanel HorizontalAlignment="Center" Orientation="Vertical" VerticalAlignment="Center" >
                            <TextBlock HorizontalAlignment="Center" TextWrapping="Wrap" x:Name="txtblktype" Text="{Binding Name}" Foreground="Black" Margin="0,10,0,0" FontSize="21"/>
                        </StackPanel>
                    </Grid>
                </Border>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</ScrollViewer>

CS

    MyData data1 = new MyData();
    data1.id = 1;
    data1.IsFeatured = true;
    data1.Name = "Featured Item 1";
    myDatas.Add(data1);


    MyData data2 = new MyData();
    data2.id = 2;
    data2.IsFeatured = true;
    data2.Name = "Featured Item 2";
    myDatas.Add(data2);

    MyData data3 = new MyData();
    data3.id = 3;
    data3.IsFeatured = false;
    data3.Name = "Ordinary Item 3";
    myDatas.Add(data3);

    MyData data4 = new MyData();
    data4.id = 4;
    data4.IsFeatured = false;
    data4.Name = "Ordinary Item 4";
    myDatas.Add(data4);
    lstproductstype.ItemsSource = myDatas;

3 个答案:

答案 0 :(得分:0)

好的,我认为最简单的方法是使用多边形。只需弄清楚如何对角写文字。

答案 1 :(得分:0)

我的建议如下 在任何工具中创建如上图像 然后在每个单元格中使用2列,第二行使用图像

基于隐藏图像。

这应该更简单。

答案 2 :(得分:0)

制作一个带有透明背景和文字的featured.png。然后还将转换器从布尔值转换为可见性。然后将该图像放在边框中的文本块顶部,在这些文本块中,网格彼此叠加。

<Border ...>
    <Grid>
        <Grid>
            <TextBlock .../>
        </Grid>
        <Grid>
            <Image Source="featured.png" 
                   VerticalAlignment="Top" 
                   HorizontalAlignment="Right"
                   Visibility="{Binding IsFeatured, Converter={StaticResource BooleanToVisibilityConverter}"/>
        </Grid>
    </Grid>
</Border>

将转换器创建为窗口/ usercontrol中的资源。

<custom:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>