silverlight学习:Silverlight学习笔记 2(续)

  上篇中在设置排序标志时候需要不停去刷新这样做肯定是不行所以必须要找到其它方式

  看了下有关自定义ColumnHeader内容在2.0测试版本中可以直接设置Column.Header为某个自定义Control控件但是在正式版中这个功能被取消了必须要通过Column.HeaderStyle来设置动态设置Style还是比较费事暂时还没有做好

  所以想了个折中办法就是在Header上面手工加上"↑"和"↓"来标示排序方向

  所要做就是在MouseDown中修改下Header.Content

  代码如下:

1privatevoiddgData_MouseLeftButtonDown(objectsender,MouseButtonEventArgse)
2    {
3      varu=fromelementinVisualTreeHelper.FindElementsInHostCoordinates(e.GetPosition(null),dgData)
4          whereelementisDataGridColumnHeader
5          selectelement;
6
7      (u.Count1)
8      {
9        //鼠标点击ColumnHeader
10        DataGridColumnHeaderheader=(DataGridColumnHeader)u.Single;
11        //要排序字段
12        _sort=header.Content.;
13        //清除名称中↑和↓
14        _sort=removeSortStateFlag(_sort);
15        //判断排序方向
16        (_sortsortFiled)
17          dir=dir"desc"?"asc":"desc";
18        
19        {
20          //如果新排序字段和当前排序字段不则要清楚当前排序字段排序标志(↑↓)
21          (sortHeader!=null)
22            sortHeader.Content=removeSortStateFlag(sortHeader.Content.);
23          dir="asc";
24        }
25        sortFiled=_sort;
26        //加上排序标志
27        header.Content=dir"asc"?_sort+"↑":_sort+"↓";
28        //设置新排序字段为当前排序字段
29        sortHeader=header;
30        BindGrid;
31        e.Handled=true;
32      }
33      
34        e.Handled=false;
35    }


  完整代码如下:

 1  publicpartialProductsList:UserControl
 2  {
 3    privateList<Products>products_list;
 4    privatePagerpager=null;
 5    //当前排序字段
 6    privatesortFiled="ProductID";
 7    //当前排序方向
 8    privatedir="asc";
 9    //当前排序ColumnHeader
10    privateDataGridColumnHeadersortHeader;
11
12    publicProductsList
13    {
14      InitializeComponent;
15      MouseHelper.SetMouseWheelHandler(OnMouseWheel);
16      BindGrid;
17    }
18
19    privatevoidBindGrid
20    {
21      canvas.Visibility=Visibility.Visible;
22      varclient=NorthWindWCF.NorthWindWCFClient;
23      client.GetProductsPagingCompletedEventHandler<GetProductsPagingCompletedEventArgs>(client_GetProductsPagingCompleted);
24      start=1;
25      limit=10;
26      (pager!=null)
27        start=(pager.PageIndex-1)*10+1;
28      client.GetProductsPagingAsync(start,limit,sortFiled,dir);
29    }
30
31    publicvoidOnMouseWheel(objectsender,MouseWheelHandlerEventArgsargs)
32    {
33      (Parentnull);
34      sv.ScrollToVerticalOff(sv.VerticalOff-args.Delta*15);
35    }
36
37    privatevoidclient_GetProductsPagingCompleted(objectsender,GetProductsPagingCompletedEventArgse)
38    {
39      (e.Errornull)
40      {
41        products_list=e.Result.ToList;
42        dgData.ItemsSource=products_list;
43        (pagernull)
44        {
45          pager=Pager(e.TotalPage,2);
46          pager.ClickPager.PagerButtonClick(pager_Click);
47          pager.PageIndex=1;
48          spPager.Children.Clear;
49          spPager.Children.Add(pager);
50        }
51      }
52      
53        MessageBox.Show(e.Error.Message);
54      canvas.Visibility=Visibility.Collapsed;
55    }
56
57    privatevoidpager_Click(objectsender,RoutedEventArgse)
58    {
59      BindGrid;
60    }
61
62    privatevoiddgData_MouseLeftButtonDown(objectsender,MouseButtonEventArgse)
63    {
64      varu=fromelementinVisualTreeHelper.FindElementsInHostCoordinates(e.GetPosition(null),dgData)
65          whereelementisDataGridColumnHeader
66          selectelement;
67
68      (u.Count1)
69      {
70        //鼠标点击ColumnHeader
71        DataGridColumnHeaderheader=(DataGridColumnHeader)u.Single;
72        //要排序字段
73        _sort=header.Content.;
74        //清除名称中↑和↓
75        _sort=removeSortStateFlag(_sort);
76        //判断排序方向
77        (_sortsortFiled)
78          dir=dir"desc"?"asc":"desc";
79        
80        {
81          //如果新排序字段和当前排序字段不则要清楚当前排序字段排序标志(↑↓)
82          (sortHeader!=null)
83            sortHeader.Content=removeSortStateFlag(sortHeader.Content.);
84          dir="asc";
85        }
86        sortFiled=_sort;
87        //加上排序标志
88        header.Content=dir"asc"?_sort+"↑":_sort+"↓";
89        //设置新排序字段为当前排序字段
90        sortHeader=header;
91        BindGrid;
92        e.Handled=true;
93      }
94      
95        e.Handled=false;
96    }
97
98    privateremoveSortStateFlag(dir)
99    {
100      pos=dir.IndexOfAny(char{'↑','↓'});
101      (pos>0)dir=dir.Sub(0,pos-1);
102      dir;
103    }
104




  最终效果:

Silverlight学习笔记 2(续)



Tags:  silverlight.2.0 silverlight是什么 silverlight silverlight学习

延伸阅读

最新评论

发表评论