• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 55  文章 - 15  trackbacks - 0
            <2012年5月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            常用鏈接

            留言簿

            隨筆分類

            隨筆檔案

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

                  
                     前文再續,書接上一回。上次使得我們的GridView每個Item都有不同的尺寸,至少有點與眾不同了,今天我們更近一步,不僅尺寸不同,而且Item顯示的方式也不同。閑話少敘,先上圖:
                  
              我們看到,這是一個Grouped GridView,分成很多個組,這是截取的第一個組。我們看到,該組里面的第一個GridViewItem中的時間、圖片都與其他幾個不一樣,而且,第一個GridViewItem中還多了下面的一行1.Low:12312.現在我們就來看具體的步驟。
                   其實步驟很簡單,GridView、ListView這種接收Collection作為源的控件,都有一個ItemTemplateSelector的屬性,這個屬性接收一個DateTemplateSelector類型的值。我們要做的,就是寫一個類繼承自DataTemplateSelector,設置一系列的DataTemplate類型的屬性,并且重寫其中的虛函數SelectTemplateCore()方法即可。具體步驟如下:
             1 public ref class myDataTemplateSelector sealed : public Windows::UI::Xaml::Controls::DataTemplateSelector
             2     {
             3     public:
             4         property Windows::UI::Xaml::DataTemplate^ dataTemplate0;
             5         property Windows::UI::Xaml::DataTemplate^ dataTemplate1;
             6         property Windows::UI::Xaml::DataTemplate^ dataTemplate2;
             7         // 可以有很多個屬性。
             8         virtual Windows::UI::Xaml::DataTemplate^ SelectTemplateCore(Platform::Object^ item, Windows::UI::Xaml::DependencyObject^ container) override;
             9         
            10     };

                  類定義:
             1 Windows::UI::Xaml::DataTemplate^  myDataTemplateSelector::SelectTemplateCore(Platform::Object^ item, Windows::UI::Xaml::DependencyObject^ container)
             2 {
             3     {
             4             auto _item = (Data::DataItem^)item;
             5             switch (_item->TemplateFlag)
             6                {   
            case 0:
             7                          return dataTemplate0; break;
             8                      case 1                
             9                          
            return dataTemplate1; break;
            10                      case 2             
            11                         
            return dataTemplate2;break;
            12
            13                      default:
            14                          break;
            15                   }
            16             return Windows::UI::Xaml::Controls::DataTemplateSelector::SelectTemplateCore(item,container);
            17         }
                  }

            其中第5行的TempFlag是我自己設置的用來辨別應該用哪個Template的,大家可以自行根據自己的類來進行判斷。這個方法的意思就是,將container中的所有item都遍歷一遍,然后為每個item選擇一種DataTemplate。

            當我們完成了這個類之后,還要在XAML文件中進行配置。dataTemplate0--2 必須有相關聯的dataTemplate才能起作用,我們要在XAML文件中初始化這個類(當然你也可以在cpp文件中初始化,但是不如XAML直觀):
            1         <local:myDataTemplateSelector x:Name="myDataTemplateSelector" dataTemplate1="{StaticResource SmallDateTemplate}" dataTemplate0="{StaticResource BigDateTemplate}" dataTemplate2="{StaticResource OthersTemplate}"/>
            2 
            因為我們的類不是系統自帶的,所以在實例化的時候要加上一個local:,我們的實例命名為“myDataTemplateSelector",其中的SamllDateTemplate、BigDateTemplate和OthersTemplate都是我們在Page.Resource里面預先定義好的資源,所以,就可以用上面的代碼進行賦值。順序可以打亂,沒有影響。
            然后,將這個DataTemplateSelector同GridView聯系起來:
            1 <common:VariableGridView
            2  ItemTemplateSelector="{StaticResource myDataTemplateSelector}"
            3 />
            因為我的VariableGridView是定義在common名字空間中的,所以前面應該加上common:。
            至此,我們的ItemTemplateSelector就已經完成了,當運行程序的時候,我們可以看到不同的Item有不同的DataTemplate。


            另外,GridView還有一個GroupTemplateSelector,但是該屬性貌似不起作用,在微軟官方論壇上問了問題,也沒有人回應。把問題貼在這里,如果有人看到,請幫忙解答一下,謝謝!



            0
             


            I find this question in C# forum, but I didn't find the answer.

            My question is I want to select different GroupStyle for a grouped GridView control. When I derive a class from GroupStyleSelector and override virtual method SelectGroupStyleCore(), I only can return a default GroupStyle. My code looks like this:
            public ref class myGroupStyleSelector sealed : public Windows::UI::Xaml::Controls::GroupStyleSelector
                {
                public:
                    property Windows::UI::Xaml::Controls::GroupStyle^ groupTemplate0;
                    property Windows::UI::Xaml::Controls::GroupStyle^ groupTemplate1;
                    property Windows::UI::Xaml::Controls::GroupStyle^ groupTemplate2;

                            virtual Windows::UI::Xaml::Controls::GroupStyle^ SelectGroupStyleCore(Platform::Object^ group, unsigned int level) override
                    {
                        
                        auto collectionViewGroup = safe_cast
            <Windows::UI::Xaml::Data::ICollectionViewGroup^>(group);
                        if(collectionViewGroup != nullptr)
                        {
            //ItemsContainer include Items
                            auto groupVM = safe_cast
            <ItemsContainer^>(collectionViewGroup->Group);
                            if(groupVM != nullptr)
                            {
            // ContainerGroup is a Groups enum, indicate which group is
                                switch(groupVM->ContainerGroup)
                                {
                                    case Groups::Group1:
                                        return groupTemplate0;
                                        break;
                                    case Groups::Group2:
                                        return groupTemplate1;
                                        break;
                                    default:
                                        return groupTemplate2;
                                        break;
                                }
                            }
                            return Windows::UI::Xaml::Controls::GroupStyleSelector::SelectGroupStyleCore(group, level);
                        }
            // If I write it like this, I always get groupTemplate1, why?
                        return groupTemplate1;
                    }
                };

            I set a break point at beginning of this class, and I notify when the first and second time this method was invoked, the group and level is 0, at the third time level is 1, but I only get goupTemplate1. Is that I forgot something?

            Thanks!

                     下一章提示:GridView絕對是一個很復雜的東西,如何設置GridView,GridView中的屬性都代表神馬意思,下一章進行簡單的介紹。
            posted on 2012-10-17 21:01 Dino-Tech 閱讀(1575) 評論(0)  編輯 收藏 引用 所屬分類: Windows 8
            国产麻豆精品久久一二三| 久久久久久久国产免费看| 久久亚洲美女精品国产精品| 亚洲国产精品久久久天堂| 久久精品国产亚洲AV大全| 国产精品热久久毛片| 久久一区二区免费播放| 一本色道久久88—综合亚洲精品| 精品午夜久久福利大片| 久久久噜噜噜久久中文字幕色伊伊 | 88久久精品无码一区二区毛片 | 久久96国产精品久久久| 亚洲精品99久久久久中文字幕 | 久久久亚洲裙底偷窥综合 | 色综合合久久天天给综看| 久久精品国产网红主播| 久久天天婷婷五月俺也去| 97久久国产亚洲精品超碰热 | 久久精品国产精品青草app| 2021国内精品久久久久久影院| 久久国产高清字幕中文| 亚洲精品午夜国产VA久久成人| 久久久久一本毛久久久| 青青草原综合久久| 久久ZYZ资源站无码中文动漫 | 国产精品激情综合久久| 久久99精品久久久久久hb无码| 久久人妻少妇嫩草AV蜜桃| 久久性精品| 久久久久久亚洲精品不卡| 国产一区二区精品久久岳| 久久免费精品视频| 国产精品一久久香蕉国产线看 | 久久精品成人欧美大片| 久久久久久久97| 亚洲午夜无码久久久久小说| 久久天天躁狠狠躁夜夜2020老熟妇| 国产激情久久久久影院| 久久国产成人| 亚洲国产日韩综合久久精品| 日日狠狠久久偷偷色综合96蜜桃 |