关于windows metro应用程序开发的一点小心得


        做了将近半年的windows metro应用程序开发,从对这个平台毫无了解,到现在基本上都可以实现,经历了懵懂时候的无从下手,对C#编程中细节的不了解,对技术的模糊,到现在的基本上有所心得,实在是很不容易.今天是第一次在CSDN上写博客(基本上在所有互联网上都没写过两三次),如果写的不好,内容啥的没说清楚,还请各位大牛不要见笑!

        一些最基本的简单的东西我就不赘述了(当然过于复杂的我也不会......),今天就跟大家介绍一下数据绑定.

 

       一 数据绑定

      数据绑定在windows应用商店应用开发中是非常重要的,也是我们经常用到的东西.

      下面我们介绍一下如何在GridView中实现数据绑定(ListView.FlipView中也是一样的)

      首先在xmal中的代码:

 
<GridView x:Name="ItemSource_GridView" Padding="20" Margin="20,45,20,20" ItemClick="ItemSource_GridView_ItemClick" IsItemClickEnabled="True">
                <GridView.ItemTemplate>
                    <DataTemplate>
                        <Border Height="150" Width="250" Background="Purple">
                            <Grid Height="150" Width="250">
                                <Image Source="{Binding Item_Thumbnail}"/>
                                <Grid Background="Black" Opacity="0.6" Height="40" VerticalAlignment="Bottom"/>
                                <StackPanel Orientation="Horizontal" VerticalAlignment="Bottom">
                                    <Image Source="{Binding Item_Image}" Width="36" Height="36" Margin="3,0,3,0"/>
                                    <TextBlock Text="{Binding Item_Name}" FontSize="18" VerticalAlignment="Center" TextTrimming="WordEllipsis"/>
                                </StackPanel> 
                            </Grid>
                        </Border>
                    </DataTemplate>
                </GridView.ItemTemplate>
            </GridView>

     

  我们可以从上面代码中看到,红色字体部分分别绑定到了三个不同的值上面,接下来,我们在C#代码中定义一个新的类

    class LibraryItem
    {
        public BitmapImage Item_Thumbnail { get;set;}
        public BitmapImage Item_Image { get; set; }
        public IStorageItem Item_Source { get; set; }
        public string Item_Name { get; set; }
    }

其中一定要注意每个成员的get和set属性!

然后,

List<LibraryItem> resourceList = new List<LibraryItem>();


 

 try 
            {
                IReadOnlyList<IStorageItem> storageItem = await KnownFolders.VideosLibrary.GetItemsAsync();
                if (storageItem.Count > 0)
                {
                    foreach (IStorageItem item in storageItem)
                    {
                        if (item.IsOfType(StorageItemTypes.Folder))
                        {
                            StorageFolder folder = item as StorageFolder;
                            StorageItemThumbnail thumbnail = await folder.GetThumbnailAsync(ThumbnailMode.VideosView,190);
                            if (thumbnail != null)
                            {
                                using (IRandomAccessStream stream = thumbnail.CloneStream())
                                {
                                    BitmapImage bitmapImage = new BitmapImage();
                                    bitmapImage.SetSource(stream);
                                    LibraryItem folderItem = new LibraryItem
                                    {
                                        Item_Thumbnail = bitmapImage,
                                        Item_Source = folder,
                                        Item_Name = folder.Name,
                                        Item_Image = new BitmapImage(new Uri("ms-appx:///Images/MainPage/videoFolder.png")),
                                    };
                                    resourceList.Add(folderItem);
                                }
                            }
                            else
                            {
                                LibraryItem folderItem = new LibraryItem
                                {
                                    Item_Thumbnail = null,
                                    Item_Source = folder,
                                    Item_Name = folder.Name,
                                    Item_Image = new BitmapImage(new Uri("ms-appx:///Images/MainPage/videoFolder.png")),
                                };
                                resourceList.Add(folderItem);
                            }   
                        }
                        else if (item.IsOfType(StorageItemTypes.File))
                        {
                            StorageFile file = item as StorageFile;
                            if (fileTypeFilter.Contains(file.FileType.ToLower()))
                            {
                                StorageItemThumbnail thumbnail = await file.GetThumbnailAsync(ThumbnailMode.VideosView, 190);
                                using (IRandomAccessStream stream = thumbnail.CloneStream())
                                {
                                    BitmapImage bitmapImage = new BitmapImage();
                                    bitmapImage.SetSource(stream);
                                    LibraryItem fileItem = new LibraryItem
                                    {
                                        Item_Thumbnail = bitmapImage,
                                        Item_Source = file,
                                        Item_Name = file.Name,
                                        Item_Image = new BitmapImage(new Uri("ms-appx:///Images/MainPage/videoFile.png")),
                                    };
                                    resourceList.Add(fileItem);
                                }
                            }
                        }
                    }
                }
                ItemSource_GridView.ItemsSource = resourceList;
            }
            catch(InvalidOperationException e)
            {
                UC.UserControl_TipMessage uc_tm = new UC.UserControl_TipMessage(e.Message);
                uc_tm.Show();
            }


以上是实现的效果.

 

之后我会和大家介绍一下Custom Control,自定义控件,这是一个能让你的应用程序非常个性化的控件,敬请期待!

代码介绍 MetroForWinForm(win8风格模版) using System; using System.Drawing; using System.Globalization; using System.Windows.Forms; using MetroFramework.Forms; namespace MetroFramework.Demo { public partial class MainForm : MetroForm { public MainForm() { InitializeComponent(); metroStyleManager.Theme = MetroThemeStyle.Default; metroStyleManager.Style = MetroColorStyle.Teal; } private void metroTileSwitch_Click(object sender, EventArgs e) { var m = new Random(); int next = m.Next(0, 13); metroStyleManager.Style = (MetroColorStyle)next; } private void metroTile1_Click(object sender, EventArgs e) { metroStyleManager.Theme = metroStyleManager.Theme == MetroThemeStyle.Light ? MetroThemeStyle.Dark : MetroThemeStyle.Light; } private void metroButton1_Click(object sender, EventArgs e) { MetroTaskWindow.ShowTaskWindow(this, "SubControl in TaskWindow", new TaskWindowControl(), 10); } private void metroButton2_Click(object sender, EventArgs e) { MetroMessageBox.Show(this, "Do you like this metro message box?", "Metro Title", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Asterisk); } private void metroButton5_Click(object sender, EventArgs e) { metroContextMenu1.Show(metroButton5, new Point(0, metroButton5.Height)); } private void metroButton6_Click(object sender, EventArgs e) { MetroMessageBox.Show(this, "This is a sample MetroMessagebox `OK` only button", "MetroMessagebox", MessageBoxButtons.OK, MessageBoxIcon.Information); } private void metroButton10_Click(object sender, EventArgs e) { MetroMessageBox.Show(this, "This is a sample MetroMessagebox `OK` and `Cancel` button", "MetroMessagebox", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); } private void metroButton7_Click(object sender, EventArgs e) { MetroMessageBox.Show(this, "This is a sample MetroMessagebox `Yes` and `No` button", "MetroMessagebox", MessageBoxButtons.YesNo, MessageBoxIcon.Question); } private void metroButton8_Click(object sender, EventArgs e) { MetroMessageBox.Show(this, "This is a sample MetroMessagebox `Yes`, `No` and `Cancel` button", "MetroMessagebox", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question); } private void metroButton11_Click(object sender, EventArgs e) { MetroMessageBox.Show(this, "This is a sample MetroMessagebox `Retry` and `Cancel` button. With warning style.", "MetroMessagebox", MessageBoxButtons.RetryCancel, MessageBoxIcon.Warning); } private void metroButton9_Click(object sender, EventArgs e) { MetroMessageBox.Show(this, "This is a sample MetroMessagebox `Abort`, `Retry` and `Ignore` button. With Error style.", "MetroMessagebox", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Error); } private void metroButton12_Click(object sender, EventArgs e) { MetroMessageBox.Show(this, "This is a sample `default` MetroMessagebox ", "MetroMessagebox"); } private void metroButton4_Click(object sender, EventArgs e) { var testform = new TestForm1(); testform.ShowDialog(); } private void metroButton4_Click_1(object sender, EventArgs e) { metroTextBox2.Focus(); } } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值