locked
listview怎么显示两种不同的布局 RRS feed

答案

  • 首先,在WP里面,列表控件是ListBox

    显示不同的布局,则需要给ListBox定义不同的样式,举例如下:

    <phone:PhoneApplicationPage.Resources> <DataTemplate x:Key="SpecialDataTemplate"> <Border BorderThickness="2" BorderBrush="White"> <StackPanel Orientation="Horizontal"> <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding ConsumptionName}" FontSize="30"></TextBlock> <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding ConsumptionAmount}" FontSize="30" Margin="10,0,0,0"></TextBlock> <Button>Update</Button> <Button>Del</Button> </StackPanel> </Border> </DataTemplate> <DataTemplate x:Key="NormalDataTemplate"> <StackPanel Orientation="Horizontal"> <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding ConsumptionName}" FontSize="30"></TextBlock> <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding ConsumptionAmount}" FontSize="30" Margin="10,0,0,0"></TextBlock> </StackPanel> </DataTemplate> </phone:PhoneApplicationPage.Resources>

    在需要更换ListBox的显示样式的时候,设置ListBox的Style为对应的资源样式即可,比如
    listBox.ItemTemplate = this.Resources["NormalDataTemplate"] as DataTemplate;




    2014年10月16日 1:36
  • hi Edward_jie

    WP中既然楼主提到了ListView那肯定是WP8.1了。所以在WP里面,列表控件可以是ListBox,也可以是ListView。

    按楼主的意思,应该是一个listview中根据数据的不同显示不同的样式。需要用到ItemTemplateSelector。

    楼主可以搜索ItemTemplateSelector用法即可解决问题。

    Edward_jie,你xaml中写的是DataTemplate,代码写的时候却是设置style的写法。

    代码手动指定listview的不同DataTemplate如下:

    ContentPresenter myContentPresenter = (ContentPresenter)(listbox.ContainerFromItem(item);
    
                if (myContentPresenter.ContentTemplate.Equals(dataTemplateSelectName))
                {
                    myContentPresenter.ContentTemplate = dataTemplateNoSelectName;
                }
                else
                {
                    myContentPresenter.ContentTemplate = dataTemplateSelectName;
                }

    2014年10月17日 10:10

全部回复

  • 首先,在WP里面,列表控件是ListBox

    显示不同的布局,则需要给ListBox定义不同的样式,举例如下:

    <phone:PhoneApplicationPage.Resources> <DataTemplate x:Key="SpecialDataTemplate"> <Border BorderThickness="2" BorderBrush="White"> <StackPanel Orientation="Horizontal"> <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding ConsumptionName}" FontSize="30"></TextBlock> <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding ConsumptionAmount}" FontSize="30" Margin="10,0,0,0"></TextBlock> <Button>Update</Button> <Button>Del</Button> </StackPanel> </Border> </DataTemplate> <DataTemplate x:Key="NormalDataTemplate"> <StackPanel Orientation="Horizontal"> <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding ConsumptionName}" FontSize="30"></TextBlock> <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding ConsumptionAmount}" FontSize="30" Margin="10,0,0,0"></TextBlock> </StackPanel> </DataTemplate> </phone:PhoneApplicationPage.Resources>

    在需要更换ListBox的显示样式的时候,设置ListBox的Style为对应的资源样式即可,比如
    listBox.ItemTemplate = this.Resources["NormalDataTemplate"] as DataTemplate;




    2014年10月16日 1:36
  • hi Edward_jie

    WP中既然楼主提到了ListView那肯定是WP8.1了。所以在WP里面,列表控件可以是ListBox,也可以是ListView。

    按楼主的意思,应该是一个listview中根据数据的不同显示不同的样式。需要用到ItemTemplateSelector。

    楼主可以搜索ItemTemplateSelector用法即可解决问题。

    Edward_jie,你xaml中写的是DataTemplate,代码写的时候却是设置style的写法。

    代码手动指定listview的不同DataTemplate如下:

    ContentPresenter myContentPresenter = (ContentPresenter)(listbox.ContainerFromItem(item);
    
                if (myContentPresenter.ContentTemplate.Equals(dataTemplateSelectName))
                {
                    myContentPresenter.ContentTemplate = dataTemplateNoSelectName;
                }
                else
                {
                    myContentPresenter.ContentTemplate = dataTemplateSelectName;
                }

    2014年10月17日 10:10
  • 谢谢补充,受教了
    2014年10月20日 2:52