一:添加自定義分頁控件,命名為KDataPagerTwo:
1 public class KDataPagerTwo : Control, INotifyPropertyChanged
2 {
3 static KDataPagerTwo()
4 {
5 DefaultStyleKeyProperty.OverrideMetadata(typeof(KDataPagerTwo), new FrameworkPropertyMetadata(typeof(KDataPagerTwo)));
6 }
7
8 public event PropertyChangedEventHandler PropertyChanged;
9 protected void OnPropertyChanged(string propertyName)
10 {
11 PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
12 if (propertyName == "PagerIndex")
13 {
14 if (PagerIndex != 0)
15 ChosenNumber();
16 }
17 else if (propertyName == "PagerTotal" || propertyName == "PagerSize")
18 Refresh();
19 }
20
21 #region 變量定義
22 public TextBox txt_Jump;
23 public TextBlock txt_One;
24 public TextBlock txt_Two;
25 public TextBlock txt_Three;
26 public TextBlock txt_Four;
27 public TextBlock txt_Five;
28 public TextBlock txt_Six;
29 public TextBlock txt_Total;
30 /// <summary>
31 /// 首頁
32 /// </summary>
33 public Image Img_HomePage;
34 /// <summary>
35 /// 上一頁
36 /// </summary>
37 public Image Img_PreviousPage;
38 /// <summary>
39 /// 下一頁
40 /// </summary>
41 public Image Img_NextPage;
42 /// <summary>
43 /// 尾頁
44 /// </summary>
45 public Image Img_TailPage;
46 /// <summary>
47 /// 跳轉按鈕
48 /// </summary>
49 public Button btn_Ok;
50 #endregion
51
52 #region 依賴屬性
53 /// <summary>
54 /// 頁大小
55 /// </summary>
56 public int PagerSize
57 {
58 get { return (int)GetValue(PagerSizeProperty); }
59 set { SetValue(PagerSizeProperty, value); OnPropertyChanged("PagerSize"); }
60 }
61
62 /// <summary>
63 /// 當前頁
64 /// </summary>
65 public int PagerIndex
66 {
67 get { return (int)GetValue(PagerIndexProperty); }
68 set { SetValue(PagerIndexProperty, value); OnPropertyChanged("PagerIndex"); }
69 }
70
71 /// <summary>
72 /// 總計錄數
73 /// </summary>
74 public int PagerTotal
75 {
76 get { return (int)GetValue(PagerTotalProperty); }
77 set { SetValue(PagerTotalProperty, value); OnPropertyChanged("PagerTotal"); }
78 }
79
80 /// <summary>
81 /// 總頁數
82 /// </summary>
83 public int PagerCount
84 {
85 get { return (int)GetValue(PagerCountProperty); }
86 set { SetValue(PagerCountProperty, value); OnPropertyChanged("PagerCount"); }
87 }
88
89 //使用一個依賴屬性作為PagerCount的後備存儲器。這支持動畫、樣式、綁定等。
90 public static readonly DependencyProperty PagerCountProperty =
91 DependencyProperty.Register("PagerCount", typeof(int), typeof(KDataPagerTwo), new UIPropertyMetadata(15));
92
93 //使用一個可靠的屬性作為總的後備存儲器。這支持動畫、樣式、綁定等
94 public static readonly DependencyProperty PagerTotalProperty =
95 DependencyProperty.Register("PagerTotal", typeof(int), typeof(KDataPagerTwo), new UIPropertyMetadata(150));
96
97
98 //使用一個依賴屬性作為PagerIndex的後備存儲器。這支持動畫、樣式、綁定等。
99 public static readonly DependencyProperty PagerIndexProperty =
100 DependencyProperty.Register("PagerIndex", typeof(int), typeof(KDataPagerTwo), new UIPropertyMetadata(1));
101
102
103 //使用一個依賴屬性作為PagerSize的後備存儲器。這支持動畫、樣式、綁定等。
104 public static readonly DependencyProperty PagerSizeProperty =
105 DependencyProperty.Register("PagerSize", typeof(int), typeof(KDataPagerTwo), new UIPropertyMetadata(10));
106 #endregion 依賴屬性_end
107
108 public override void OnApplyTemplate()
109 {
110 base.OnApplyTemplate();
111
112 Img_HomePage = GetTemplateChild("Img_HomePage") as Image;
113 Img_PreviousPage = GetTemplateChild("Img_PreviousPage") as Image;
114 Img_NextPage = GetTemplateChild("Img_NextPage") as Image;
115 Img_TailPage = GetTemplateChild("Img_TailPage") as Image;
116 btn_Ok = GetTemplateChild("btn_Ok") as Button;
117 txt_Jump = GetTemplateChild("txt_Jump") as TextBox;
118
119 txt_One = GetTemplateChild("txt_One") as TextBlock;
120 txt_Two = GetTemplateChild("txt_Two") as TextBlock;
121 txt_Three = GetTemplateChild("txt_Three") as TextBlock;
122 txt_Four = GetTemplateChild("txt_Four") as TextBlock;
123 txt_Five = GetTemplateChild("txt_Five") as TextBlock;
124 txt_Six = GetTemplateChild("txt_Six") as TextBlock;
125 txt_Total = GetTemplateChild("txt_Total") as TextBlock;
126 // 綁定事件
127 Img_HomePage.MouseLeftButtonUp += Img_HomePage_MouseLeftButtonUp;
128 Img_PreviousPage.MouseLeftButtonUp += Img_PreviousPage_MouseLeftButtonUp;
129 Img_NextPage.MouseLeftButtonUp += Img_NextPage_MouseLeftButtonUp;
130 Img_TailPage.MouseLeftButtonUp += Img_TailPage_MouseLeftButtonUp;
131 btn_Ok.Click += Btn_Ok_Click; ;
132 txt_Jump.TextChanged += Txt_Jump_TextChanged;
133
134 txt_One.MouseLeftButtonUp += Txt_MouseLeftButtonUp;
135 txt_Two.MouseLeftButtonUp += Txt_MouseLeftButtonUp;
136 txt_Three.MouseLeftButtonUp += Txt_MouseLeftButtonUp;
137 txt_Four.MouseLeftButtonUp += Txt_MouseLeftButtonUp;
138 txt_Five.MouseLeftButtonUp += Txt_MouseLeftButtonUp;
139 txt_Six.MouseLeftButtonUp += Txt_MouseLeftButtonUp;
140 //刷新頁數
141 Refresh();
142 }
143
144 /// <summary>
145 /// 點擊TextBlock事件
146 /// </summary>
147 private void Txt_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
148 {
149 if ((sender as TextBlock).Text.ToString() != "…")
150 PagerIndex = int.Parse((sender as TextBlock).Text);
151 }
152
153 /// <summary>
154 /// 只能輸入數字
155 /// </summary>
156 private void Txt_Jump_TextChanged(object sender, TextChangedEventArgs e)
157 {
158 //屏蔽中文輸入和非法字符粘貼輸入
159 TextBox textBox = sender as TextBox;
160 TextChange[] change = new TextChange[e.Changes.Count];
161 e.Changes.CopyTo(change, 0);
162 int offset = change[0].Offset;
163 if (change[0].AddedLength > 0)
164 {
165 double num = 0;
166 if (!Double.TryParse(textBox.Text, out num))
167 {
168 textBox.Text = textBox.Text.Remove(offset, change[0].AddedLength);
169 textBox.Select(offset, 0);
170 }
171 }
172 }
173
174 /// <summary>
175 /// 跳轉
176 /// </summary>
177 private void Btn_Ok_Click(object sender, RoutedEventArgs e)
178 {
179 int txt = int.Parse(txt_Jump.Text.ToString() == "" ? "0" : txt_Jump.Text.ToString());
180 if (txt > 0 && txt <= PagerCount)
181 PagerIndex = txt;
182 }
183
184 /// <summary>
185 /// 首頁
186 /// </summary>
187 private void Img_HomePage_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
188 {
189 PagerIndex = 1;
190 }
191
192 /// <summary>
193 /// 尾頁
194 /// </summary>
195 private void Img_TailPage_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
196 {
197 PagerIndex = PagerCount;
198 }
199
200 /// <summary>
201 /// 上一頁
202 /// </summary>
203 private void Img_PreviousPage_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
204 {
205 if (PagerIndex > 1)
206 PagerIndex--;
207 }
208
209 /// <summary>
210 /// 下一頁
211 /// </summary>
212 private void Img_NextPage_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
213 {
214 if (PagerIndex < PagerCount)
215 PagerIndex++;
216 }
217
218 #region 方法
219
220 /// <summary>
221 /// 選中數字的樣式
222 /// </summary>
223 public void ChosenNumber()
224 {
225 if (PagerIndex > (PagerCount - 6))
226 {
227 ColorChanged(6 - (PagerCount - PagerIndex)); LatterNumberChanged(PagerCount);
228 }
229 else
230 {
231 ColorChanged(1);
232 ForeFiveNumberChanged(PagerIndex);
233 LatterTwo();
234 }
235 }
236
237 SolidColorBrush ScbBlue = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#193A57"));//藍色
238 SolidColorBrush ScbRed = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#E92F2F"));//紅色
239
240 /// <summary>
241 /// 當前頁變為紅色
242 /// </summary>
243 public void ColorChanged(int GOTO)
244 {
245 txt_One.Foreground = ScbBlue;
246 txt_Two.Foreground = ScbBlue;
247 txt_Three.Foreground = ScbBlue;
248 txt_Four.Foreground = ScbBlue;
249 txt_Five.Foreground = ScbBlue;
250 txt_Six.Foreground = ScbBlue;
251 switch (GOTO)
252 {
253 case 1:
254 goto GT1;
255 case 2:
256 goto GT2;
257 case 3:
258 goto GT3;
259 case 4:
260 goto GT4;
261 case 5:
262 goto GT5;
263 case 6:
264 goto GT6;
265 }
266 GT1: txt_One.Foreground = ScbRed;
267 return;
268 GT2: txt_Two.Foreground = ScbRed;
269 return;
270 GT3: txt_Three.Foreground = ScbRed;
271 return;
272 GT4: txt_Four.Foreground = ScbRed;
273 return;
274 GT5: txt_Five.Foreground = ScbRed;
275 return;
276 GT6: txt_Six.Foreground = ScbRed;
277 }
278
279 /// <summary>
280 /// 前四個數字變化
281 /// </summary>
282 /// <param name="InitialNumber">開始數字</param>
283 public void ForeFiveNumberChanged(int InitialNumber)
284 {
285 txt_One.Text = InitialNumber.ToString();
286 txt_Two.Text = (InitialNumber + 1).ToString();
287 txt_Three.Text = (InitialNumber + 2).ToString();
288 txt_Four.Text = (InitialNumber + 3).ToString();
289 }
290
291 /// <summary>
292 /// 設置後兩位數字
293 /// </summary>
294 public void LatterTwo()
295 {
296 txt_Six.Text = PagerCount.ToString();
297 if (PagerCount > 6)
298 txt_Five.Text = "…";
299 else
300 txt_Five.Text = (PagerCount - 1).ToString();
301 }
302
303 /// <summary>
304 /// 數字從尾數開始變化
305 /// </summary>
306 /// <param name="Mantissa">尾數</param>
307 public void LatterNumberChanged(int Mantissa)
308 {
309 txt_Six.Text = Mantissa.ToString();
310 txt_Five.Text = (Mantissa - 1).ToString();
311 txt_Four.Text = (Mantissa - 2).ToString();
312 txt_Three.Text = (Mantissa - 3).ToString();
313 txt_Two.Text = (Mantissa - 4).ToString();
314 txt_One.Text = (Mantissa - 5).ToString();
315 }
316
317 /// <summary>
318 /// 設置總頁數
319 /// </summary>
320 public void SetPagerCount()
321 {
322 int pc = PagerTotal / PagerSize;
323 if (PagerTotal % PagerSize == 0)
324 PagerCount = pc;
325 else
326 PagerCount = pc + 1;
327 if (PagerCount <= 6)
328 CollapsedTXT(PagerCount);
329 txt_Total.Text = PagerTotal.ToString();
330 }
331
332 /// <summary>
333 /// 小於6頁的隱藏部分控件
334 /// </summary>
335 /// <param name="CollapsedStartTXT">從第幾個開始</param>
336 public void CollapsedTXT(int CollapsedStartTXT)
337 {
338 switch (CollapsedStartTXT)
339 {
340 case 1:
341 goto CST1;
342 case 2:
343 goto CST2;
344 case 3:
345 goto CST3;
346 case 4:
347 goto CST4;
348 case 5:
349 goto CST5;
350 }
351 return;
352 CST1: txt_Two.Visibility = Visibility.Collapsed;
353 CST2: txt_Three.Visibility = Visibility.Collapsed;
354 CST3: txt_Four.Visibility = Visibility.Collapsed;
355 CST4: txt_Five.Visibility = Visibility.Collapsed;
356 CST5: txt_Six.Visibility = Visibility.Collapsed;
357 }
358
359 /// <summary>
360 /// 刷新
361 /// </summary>
362 public void Refresh()
363 {
364 SetPagerCount();
365 ForeFiveNumberChanged(PagerIndex);
366 ColorChanged(PagerIndex);
367 LatterTwo();
368 }
369 #endregion
370 }
View Code
二:定義資源字典文件,命名為DataPagerTwo:
説明:local:KImgButton,這個也是一個自定義控件,可以改成Button控件也沒有問題
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:BaseControl"
>
<Style TargetType="Image" x:Key="Img_Size" >
<Setter Property="Width" Value="14"/>
<Setter Property="Height" Value="14"/>
</Style>
<Style TargetType="TextBlock" x:Key="Txt_Root">
<Setter Property="FontFamily" Value="新宋體"></Setter>
<Setter Property="FontSize" Value="14"></Setter>
<Setter Property="VerticalAlignment" Value="Center"></Setter>
<Setter Property="Foreground" Value="#193A57"></Setter>
</Style>
<Style TargetType="TextBlock" x:Key="Txt_Side" BasedOn="{StaticResource Txt_Root}">
<Setter Property="Foreground" Value="#193A57"></Setter>
<Setter Property="HorizontalAlignment" Value="Center"></Setter>
</Style>
<Style TargetType="TextBlock" x:Key="Txt_Margin" BasedOn="{StaticResource Txt_Root}">
<Setter Property="Margin" Value="4"/>
<Setter Property="Cursor" Value="Hand"></Setter>
</Style>
<Style TargetType="local:KImgButton">
<Setter Property="IsEnabled" Value="True"></Setter>
<Setter Property="CornerRadius" Value="2"></Setter>
<Setter Property="FIconSize" Value="0"></Setter>
</Style>
<Style TargetType="{x:Type local:KDataPagerTwo}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:KDataPagerTwo}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" Margin="10,0">
<TextBlock Style="{StaticResource Txt_Side}" Text="共"></TextBlock>
<TextBlock Style="{StaticResource Txt_Side}" Text="0" Margin="5,0" x:Name="txt_Total"></TextBlock>
<TextBlock Style="{StaticResource Txt_Side}" Text="條數據。"></TextBlock>
</StackPanel>
<StackPanel Orientation="Horizontal" Grid.Column="1" x:Name="Stack_Control" HorizontalAlignment="Right" Margin="10,0">
<Image x:Name="Img_HomePage" Source="/BaseControl;component/Images/DataPagerImages/First.png" Margin="5,0" Style="{ StaticResource Img_Size}" Cursor="Hand"/>
<Image x:Name="Img_PreviousPage" Source="/BaseControl;component/Images/DataPagerImages/prev.png" Style="{ StaticResource Img_Size}" Cursor="Hand"/>
<TextBlock x:Name="txt_One" Text="1" Style="{StaticResource Txt_Margin}"/>
<TextBlock x:Name="txt_Two" Text="2" Style="{StaticResource Txt_Margin}"/>
<TextBlock x:Name="txt_Three" Text="3" Style="{StaticResource Txt_Margin}"/>
<TextBlock x:Name="txt_Four" Text="4" Style="{StaticResource Txt_Margin}"/>
<TextBlock x:Name="txt_Five" Text="●●●" Style="{StaticResource Txt_Margin}"/>
<TextBlock x:Name="txt_Six" Text="10" Style="{StaticResource Txt_Margin}"/>
<Image x:Name="Img_NextPage" Source="/BaseControl;component/Images/DataPagerImages/Next.png" Style="{ StaticResource Img_Size}" Cursor="Hand"/>
<Image x:Name="Img_TailPage" Source="/BaseControl;component/Images/DataPagerImages/Last.png" Margin="5,0,20,0" Style="{ StaticResource Img_Size}" Cursor="Hand"/>
<TextBlock Text="到第" Style="{StaticResource Txt_Root}" Margin="-5,5,5,5"></TextBlock>
<Border Margin="0,5,5,5" Background="#4081D1" BorderBrush="#4081D1" Width="19" Height="19">
<TextBox x:Name="txt_Jump" FontFamily="微軟雅黑" VerticalContentAlignment="Center" VerticalAlignment="Center" HorizontalContentAlignment="Center" HorizontalAlignment="Center" FontSize="12" Width="17" Height="17" BorderThickness="0"/>
</Border>
<TextBlock Text="頁" Style="{StaticResource Txt_Root}" Margin="0,0,20,0"></TextBlock>
<local:KImgButton x:Name="btn_Ok" FontFamily="新宋體" FontSize="14" Content="跳轉" Height="20" Width="50" Background="#4081D1" Margin="-10,0,0,0"/>
</StackPanel>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
View Code
三:在Generic中引用資源字典文件:
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/BaseControl;component/Themes/DataPagerTwo.xaml" />
</ResourceDictionary.MergedDictionaries>
四:將Generic中下面代碼刪除:
<Style TargetType="{x:Type local:KDataPagerTwo}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:KDataPagerTwo}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
五:現在就可以用了,用法:
先引用:
再添加:
當前頁數發生變化,就可以根據DataPager.PagerIndex傳入分頁方法):
/// <summary>
/// 當某一屬性值發生改變事件
/// </summary>
private void DataPager_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
//分頁方法(根據需要可以寫成其他分頁方法)
//DataPager.PagerIndex--當前頁,DataPager.PagerSize--每頁記錄數
datagrid1.ItemsSource = TL.ToList().Skip((DataPager.PagerIndex - 1) * DataPager.PagerSize).Take(DataPager.PagerSize).ToList();
}
本文章為轉載內容,我們尊重原作者對文章享有的著作權。如有內容錯誤或侵權問題,歡迎原作者聯繫我們進行內容更正或刪除文章。