zoukankan      html  css  js  c++  java
  • Win8 Metro Style App 开发笔记(1) GridView以及相关列表控件

    刚接触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);
            }
        }

    页面上这样写。

            <selector:ForecastTemplateSelector x:Key="ItemTemplateSelector">
                <selector:ForecastTemplateSelector.LiveTemplate>
                    <DataTemplate>
                        <Grid Width="235" Height="497">
                        </Grid>
                    </DataTemplate>
                </selector:ForecastTemplateSelector.LiveTemplate>
                <selector:ForecastTemplateSelector.ForecastTemplate>
                    <DataTemplate>
                        <Grid Width="235" Height="497">
                        </Grid>
                    </DataTemplate>
                </selector:ForecastTemplateSelector.ForecastTemplate>
            </selector:ForecastTemplateSelector>

    最后,在GridView上ItemTemplateSelector="{StaticResource ItemTemplateSelector}"就可以了。

    这样就可以实现,当数据不同时候,使用不同的模版了。

    (未完待续)

  • 相关阅读:
    MySQL客户端mysqladmin命令
    13 Linux磁盘管理
    12 Linux软件管理
    11 Linux压缩打包
    09 Linux输入输出
    08 LinuxACL控制
    07 Linux特殊权限
    06 Linux基本权限
    05 Linux用户管理
    04 Linux文件编辑
  • 原文地址:https://www.cnblogs.com/fycayy/p/2628785.html
Copyright © 2011-2022 走看看