零基础学通Silverlight46:DataGrid控件

控件是对数据和方法的封装。控件可以有自己的属性、方法和事件。属性是控件数据的简单访问者,方法则是控件的一些简单而可见的功能,事件是可以被控件识别的操作。Silverlight中,控件的特性和控件显示方式分开,控件在用户界面上的样子是由控件模板决定,Silverlight为每个控件提供了默认的控件模板和相应的特性,用户也可用自己的控件模板来替换,让它成为有个性化的控件,如过去方形的按扭,可以换成圆的或椭圆的,或者任意图片等,但按扭的基本属性没有改变。
所有控件由基类System.Windows.Control类派生而来,其命名空间是System.Windows.ControlsSystem.Windows.Controls命名空间中包含的某些控件用于Silverlight运行时,其它控件用于Silverlight SDK
现对Silverlight 控件按照常规功能进行分类,主要有:
     按钮/命令控件,如:ButtonHyperlinkButtonRepeatButton

     日期显示和选择,如:CalendarDatePicker

     信息显示:TextBlockProgressBarvRichTextBox

◎ 文本显示和编辑:AutoCompleteBoxPasswordBoxTextBoxRichTextBox

◎ 数据显示 DataGridDataPagerTreeView

     图形和视频显示:ImageMultiScaleImageMediaElementInkPresenter

     对话框和窗口:OpenFileDialogSaveFileDialogChildWindowPopup

     导航:FramePage

     用户帮助: DescriptionViewerLabelToolTipValidationSummary

◎ 布局和元素分组 BorderCanvasContentControlGrid GridSplitterStackPanel ViewboxVirtualizingStackPanelScrollBarScrollViewerTabControl

     选择控件,如:CheckBoxComboBoxListBoxRadioButtonSlider

如安控件的派生关系分,有:面板控件、内容控件、列表控件等。
DataGrid 控件提供一种用户喜爱的、灵活的方式来以表格的形式显示数据,用户可根据自己的需求来定制列的模板,内置列类型包括文本框列、复选框列和模板列,位于命名空间 System.Windows.Controls 下,在 System.Windows.Controls 程序集中,该程序集并不包含在 Silverlight 运行库中,因此需添加对 System.Windows.Controls.Data.Dll 的引用,在 XAML 界面的根标记 UserControl 声明如下:
xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
实际操作时,如从工具箱中将 DataGrid 控件拖放至 XAML 界面中时,会自动添加上面的设置。
DataGrid 控件重要属性有:
IsReadOnly :可以直接编辑项。为了确保正确地提交和取消这些编辑。
IsValid :支持单元格级别的属性验证和行级别的对象验证。如果在属性 setter 中遇到验证异常,则单元格编辑控件将显示其错误状态。 DataGridCell..::.IsValid DataGridRow..::.IsValid DataGrid..::.IsValid 属性都设置为 false DataGrid 将不会退出单元格编辑模式,直到验证错误得以解决。
IPagedCollectionView :对数据进行分页。
PagedCollectionView :实现数据源提供分组、排序和分页功能。
ItemsSource :数据网格中的每一行均绑定到数据源中的一个对象,而数据网格中的每一列均绑定到该数据对象的一个属性。当向源数据中添加项或从源数据中移除项时,为了使 DataGrid 用户界面能够自动更新, DataGrid 必须绑定到实现 INotifyCollectionChanged 的集合,例如 ObservableCollection<(Of <(T>)>) 。为了自动反映属性更改,源集合中的对象必须实现 INotifyPropertyChanged 接口。
AutoGenerateColumns :属性设置为 false ,可以阻止自动生成列。如果要显式创建和配置所有列,则这一点很有用。此外,还可以让数据网格生成列,但处理 AutoGeneratingColumn 事件以便在创建后对列进行自定义。若要重新排列列的显示顺序,可以针对各个列设置 DisplayIndex 属性。
CanUserReorderColumns:属性设置为true时,可以拖动该列改变该列的顺序,否则不能拖动。

CanUserResizeColumns:属性设置为true时,用户可以用鼠标调整列的宽度,否则列的宽度不能被调整。

范例示范使用RowDetailTemplate

    13.1-6 Ch13_Exam1_4 的运行画面,单击某一行后,出现详细信息。

 

13.1-6
XAML 标记如下,已添加注解。
<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
<!--增加的命名空间支持 -->
    xmlns:myheader="clr-namespace:System.Windows.Controls.Primitives;assembly=System.Windows.Controls.Data"
    mc:Ignorable="d"
xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
x:Class="SilverlightApplication74.MainPage"
    d:DesignWidth="640" d:DesignHeight="580"
     xmlns:local="clr-namespace:SilverlightApplication74">
  <Grid x:Name="LayoutRoot">
         <StackPanel Margin="10,8,18">
                <TextBlock Height="51" Margin="179,299,0" Text="热门新车销量表" TextWrapping="Wrap" FontSize="32" Foreground="#FFE90D0D"/>
// 设置RowDetailsVisibilityMode属性
<data:DataGrid x:Name="gridStudent" Margin="10,10,0" AutoGenerateColumns="False" Width="604" Height="488" HorizontalAlignment="Left" RowDetailsVisibilityMode="VisibleWhenSelected" >
//定义详细数据区域
<data:DataGrid.RowDetailsTemplate>
                         <DataTemplate>
                                <Border>
<Border Margin="10" Padding="10" BorderBrush="SteelBlue" BorderThickness="4" CornerRadius="4">
                  <TextBlock Text="{Binding Description}" TextWrapping="Wrap" FontSize="14"></TextBlock>
                                       </Border>
                                </Border>
                         </DataTemplate>
</data:DataGrid.RowDetailsTemplate>
// 定义ColumnHeaderStyle列标题样式
                  <data:DataGrid.ColumnHeaderStyle>
                      <Style TargetType="myheader:DataGridColumnHeader">
                             <Setter Property="FontSize" Value="18" />
                                <Setter Property="Foreground" Value="Red" />
                         </Style>
                  </data:DataGrid.ColumnHeaderStyle>         
                  <data:DataGrid.Columns >
                              <data:DataGridTextColumn Header="车名"
                                     FontSize="16"
                                     Width="100"
                                     Binding="{Binding Name}" >                     
                         </data:DataGridTextColumn>                                                
                         <data:DataGridTextColumn Header="类型"
                                     FontSize="16"
                                     Width="100"
                                     Binding="{Binding Type}" >                      
                         </data:DataGridTextColumn>                                         
                              <data:DataGridTextColumn Header="销量"
                                     FontSize="16"
                                     Width="150"
                                     Binding="{Binding Total,Mode=TwoWay}">             
                                <data:DataGridTextColumn.ElementStyle>
                                   <Style TargetType="TextBlock">
                                      <Setter Property="TextWrapping" Value="Wrap" />
                                   </Style>
                                </data:DataGridTextColumn.ElementStyle>                      
                                <data:DataGridTextColumn.EditingElementStyle>
                                   <Style TargetType="TextBox">
                                      <Setter Property="FontWeight" Value="Bold" />
                                         <Setter Property="Foreground" Value="Red" />
                                   </Style>
                                </data:DataGridTextColumn.EditingElementStyle>
                         </data:DataGridTextColumn>                    
                              <data:DataGridTemplateColumn Header="图片" >             
                                     <data:DataGridTemplateColumn.CellTemplate>
                                            <DataTemplate>
  <Image Stretch="UniformToFill" Source ="{Binding Img}" Width="150"/>
                                            </DataTemplate>
                                     </data:DataGridTemplateColumn.CellTemplate>         
                                     <data:DataGridTemplateColumn.CellEditingTemplate>
                                            <DataTemplate>
                              <TextBox Text="{Binding Car,Mode=TwoWay}" />
                                            </DataTemplate>
    </data:DataGridTemplateColumn.CellEditingTemplate>
                </data:DataGridTemplateColumn>                 
    </data:DataGrid.Columns>
         </data:DataGrid>
         </StackPanel>
  </Grid>
</UserControl>
     主要代码如下:
   public void LoadData()
        {
            car = new Car[] {
                 new Car{
                                Name="新明锐",
                                Total =8500,
                                Type="小型车",
                                Img=GetPath("CarPhoto/mingru.jpg"),
Description="斯柯达品牌秉承德国大众集团的先进技术,其产品特点是智慧和品质…………….",
                                },
               new Car{
                    Name="高尔夫6",
                             Total =15500,
                             Type="豪华车",
                             Img=GetPath("CarPhoto/golf.jpg"),
                          Description="高尔夫不仅追求外观和实用性完美结合,而且在产品品质、内饰及舒适性装备上也毫不妥协地追求完美…………….."
                          },
                new Car{
                                 Name="科鲁兹",
                                Total =11000,
                                Type="中型车",
                                Img=GetPath("CarPhoto/kouluz.jpg"),
                          Description="科鲁兹的外形给人一种锋利运动的感觉,尤其是锐角的前大灯更强化了……………."
                         },
                new Car{
                                Name="福克斯两厢",
                                Total =12800,
                                Type="紧凑型车",
                                Img=GetPath("CarPhoto/fukes.jpg"),
                          Description="福克斯两厢车头采用的X焦点设计,正是福特汽车车头设计的进化成果……………."
                         },
                new Car{
                                Name="速腾1.4T",Total =10600,
                                Type="中型车",
                                Img=GetPath("CarPhoto/suteng.jpg"),
                          Description="速腾是一汽大众于200649日投放中国市场的一款新车型,其英文名称为…………….",
                         }
            };
        }
//读取图片的绝对路径
           string GetPath(string path)
           {
                  string Uri;
    string absoUri= System.Windows.Application.Current.Host.Source.AbsoluteUri;
                  if (absoUri.IndexOf("ClientBin") > 0)
               Uri=absoUri.Substring(0,absoUri.IndexOf("ClientBin")) + path;
            else
               Uri=absoUri.Substring(0,absoUri.LastIndexOf("/") + 1) + path;
                  return Uri;
           }
    }
//定义汽车类
    public class Car
    {
        public string Name
        { set;get;}
        public int Total
        { set;get;}
        public string Type
        { set;get; }
           public string Description
        { set;get; }
           public string Img
        { set;get;}
 }
更详细内容及源代码下载:
http://www.amazon.cn/mn/detailApp/ref=sr_1_1?_encoding=UTF8&s=books&qid=1287058088&asin=B0043RT7I2&sr=8-1

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


如何在Silverlight4(XAML)中绑定IsEnabled属性?我试过简单的IsEnabled=“{BindingABC}”,但这不起作用–MenuItem总是启用.提前感谢您的线索!干杯编辑:有趣的是,当设置Mode=TwoWay时,绑定似乎有效.但是,在菜单项上移动鼠标后,将更新上下文菜单的外观.这是异步工作吗?右键
我正在编写我的第一个vb.net应用程序(但我也会在这里标记c#,因为我确信即使是一个c#人也可以使用类似的.net实现来回答这个问题).我申请的简短说明:我的桌面应用程序将仅在win平台上运行,使用vb.net,它是一个简单的网吧管理软件,在服务器上运行服务器gui,在工作站上运行客户端gui,
ProcessFile()是在UIThread上运行还是在单独的线程上运行.如果它在UIThread上,如何将文件请求和ProcessFile()移动到单独的线程?varxClient=newServiceReference1.Service1SoapClient();xClient.Retrieve_File_Completed+=newEventHandler<ServiceReference1.Retrieve_Fi
我从同行那里听说,对sharepoint的了解对职业生涯有益.我们不在办公室使用sharepoint.所以不知道如何开始.这些是我的新手问题>学习共享点值得努力吗?>学习sharepoint的资源在哪里?>我是否应该考虑开发哪些参考项目?感谢您的意见.解决方法:SharePoint以如此积极的方式改变了我的职业
我正在尝试保存一个类我的类对象的集合.我收到一个错误说明:Thecollectiondatacontracttype‘System.Collections.Generic.Listcannotbedeserializedbecauseitdoesnothaveapublicparameterlessconstructor.Addingapublicparameterlessconstructorwillf
我需要根据Silverlight中的某些配置值设置给定控件的Style.我想有可能从两种可用的样式(静态资源)中选择一个控件样式.我试图做一些像:<TextBoxStyle="{BindingABC}"/>哪里publicstringABC{get{return"{StaticResourceMyStyle}";}}不幸的是,这不起作用.你有
我刚买了第一台Android设备,我喜欢它…我也很喜欢你可以创建自己的应用程序并随意分发它们.我已经阅读了一些关于Monodroid的内容,而且显然微软希望将Silverlight放在这些设备上,尽管没有太多关于它们的信息……但是Moonlight呢?如果Monodroid就像Mono……为什么我们需要它呢?相反
我们的ASP.NET网站允许用户执行各种查询,并根据从数据库查询的结果显示网络图(如UML图).目前,我们正在生成一个位图并显示它.但由于我们需要支持允许用户以交互方式显示/隐藏某些块的功能,因此我们计划使用Silverlight来渲染图形.我们还计划在未来添加更多互动.我有两个问题:>ASP
我正在开发一个Silverlight4应用程序,我已经创建了一个自定义的启动画面.乍一看,自定义启动画面运行良好–非常好.几天后,我开始注意到闪屏不再显示,屏幕仍然是空白.这似乎只发生在我打开多个指向同一个应用程序的IE选项卡/窗口时.前几个将加载正常,而以下选项卡/窗口将保持“白
这是我的XAML:<ImageVerticalAlignment="Center"HorizontalAlignment="Center"Source="{BindingInput,Converter={StaticResourceByteArrayToBitmapConverter}}"><Image.Rend
问候,我有一个ItemsControl,我更改了模板,为绑定的ItemsSource中的每个对象显示一个RadioButton.但是ItemsSource可以为空,当它为空时我想显示默认值.像“绑定列表中没有可供您选择的项目”……我想到的一种方法是将ItemsControl.Visibility设置为Collapsed,并将TextBlock.Vsibi
堆栈溢出的第一个问题……我是C#的新手,但在学习它时却非常直接.几分钟前我才看到这个tutorial.通过各种c#技术阅读WCF,WPF,Silverlight,c#和asp.net,这是很多技术都可以用c#来实现.我将创建一个Web应用程序c#.我认为SilverLight似乎是我最好的选择.该应用程序将拥有一个数
我正在使用MVVM(Model-View-ViewModel)模式编写应用程序,并利用MicrosoftP&P团队的Prism和Unity位.我有一个包含项目列表的视图.这些项包含在ViewModel中的ObservableCollection中,View中的列表框是数据绑定的(ViewModel设置为View的DataContext).在ViewModel中,我有一个运行的
我有一个应用程序,它在首次运行时显示免责声明页面.选择“接受”或“拒绝”后,您再也看不到该页面了.但是,当您在第一次运行后按后退键尝试关闭应用程序时,您将返回免责声明页面,然后再次点击该页面,返回主页面,然后再次退出.这仅在应用程序第一次运行时发生,但我希望应用程序在
我正在尝试在SilverlightforWindowsPhone中使用异步HttpWebRequest.一切都很完美,直到我到达我应该打电话的地方privatestaticManualResetEventallDone=newManualResetEvent(false);...request.BeginGetResponse(newAsyncCallback(GetResponseCallback),request);a
嗨,我有两个Writablebitmap,一个来自jpg,另一个来自png,并使用此方法在循环中混合颜色:privatestaticColorMix(Colorfrom,Colorto,floatpercent){floatamountFrom=1.0f-percent;returnColor.FromArgb((byte)(from.A*amountFrom+to.A*perc
我需要开发一个程序,它包含一个图像(png),中心有一个洞.在这个图像下将有一个框架,我想点击图像的透明孔我可以点击框架内的按钮.我不知道是否有一种方法可以通过图像或其他方式传播点击.谢谢你的帮助解决方法:你在图像上将IsHitTestVisible设置为false,然后点击浏览.
我正在研究一个silverlight应用程序,我发现List没有Find扩展方法说,List<Something>list=newList<Something>(something);list.Remove(list.Find(e=>e.id==10));没有查找扩展方法我错过了什么?解决方法:它不包括在内以减小运行时的大小.建议您使用LINQ扩展,例如First
我试图弄清楚如何设置Path元素的Data属性来获得此类型的软角:alttexthttp://i42.tinypic.com/1rzu6w.jpg现在我只有这样的尖角:alttexthttp://i42.tinypic.com/2eeleah.jpg我尝试用椭圆玩,但我无法得到我想要的东西.谢谢最佳答案:路径的段具有IsSmoothJoin属性,默认为false.
问题我有一个在远程服务器上运行的restfulWeb服务.我已经制作了一个使用它的WP7应用程序,所以我知道它有效.我正在将应用程序移植到SilverlightWeb应用程序并遇到问题.我已经包含了代码的简化版本以及引发的错误.EndGetResponse方法抛出错误.随意询问更多信息.我一直在寻找解