lyl801013 发表于 2015-5-21 10:22:48

Win8 Metro Style App 开发笔记(1)

  刚接触Metro的时候,经常会用到绑定数据的列表,常用的有GridView,ListView,ListBox,ItemsControl
  对于这2个,我觉得差别不大,用法都差不多,F12到定义会发现,他们都继承自ListViewBase,可能他们重写了一些方法。ListView我还没用过,所以没去研究。
  除了这2个,我还想说另外一个,就是他们的基类,ItemsControl。
  
  先说说我对GridView了解的一些知识和技巧(ListView类似,暂时我没发现什么区别)
  GridView是可以被点击到的,有被选中的效果。这个,使用GridView无法去掉选中效果。(我曾经想去掉来着)
  SelectionMode的属性是设置GridView点击之后,是否可以被选中。None的话,就只有点击效果,不会选中。可选的还有,Single单选,Multiple多选。
  自带了滚动条,并且,如果使用了ScrollView包起来,会导致焦点内无法使用鼠标滚轮。
  
  ItemsControl
  这个控件的每个Item都只是一个Grid(猜的),是没有点击效果的。
  
  再说说,关于绑定数据的那些事:
  正常的来说,使用设置ItemsSource,然后给设置一个ItemTemplate就可以完成数据绑定了。
  当然,这其中,会有一些特殊的需求。
  
  如:显示数据时,其中的某一个内容不同,某种情况下,要从数据源中取A属性,某种情况下取的是B属性。或者,页面的格局都不太一样,怎么办呢??
  正常的做法是,使用Selector。
  Win8原生就支持了Selector,不像其他的WP7等需要重写ContentControl实现。(其实差不多。。)
  下面就是我自己写的一个Selector,如果Temperature1为空,就使用LiveTemplate,否则使用ForecastTemplate


View Code


    public class ForecastTemplateSelector : DataTemplateSelector
{
public DataTemplate LiveTemplate { get; set; }
public DataTemplate ForecastTemplate { get; set; }
protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
{
var forecast = item as ForecastDetail;
if (forecast != null)
{
if (forecast.Temperature1 == null)
{
return LiveTemplate;
}
return ForecastTemplate;
}
return base.SelectTemplateCore(item, container);
}
}
  页面上这样写。



      













  
  最后,在GridView上ItemTemplateSelector="{StaticResource ItemTemplateSelector}"就可以了。
  这样就可以实现,当数据不同时候,使用不同的模版了。
  
  (未完待续)
页: [1]
查看完整版本: Win8 Metro Style App 开发笔记(1)