【萬里征程——Windows App開發】SemanticZoom檢視切換
相信用過Windows Phone或者Windows 8/8.1/10的朋友對下面這張截圖肯定不陌生。這就是通過SemanticZoom來實現的,當資料過多時,這種控制元件尤其適用。它有一個放大檢視ZoomedInView和一個縮小試圖ZoomedOutView,前者主要用來顯示當前頁面的詳細資訊,後者則致力於快速導航。
那麼我就自己來動手實踐咯,首先我們在XAML中新增大致的介面,就像畫畫要先畫輪廓一樣。
<Grid Name="grid1" Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<SemanticZoom x:Name="semanticZoom" VerticalAlignment="Center" HorizontalAlignment="Center">
<SemanticZoom.ZoomedOutView>
</SemanticZoom.ZoomedOutView>
<SemanticZoom.ZoomedInView>
</SemanticZoom.ZoomedInView>
</SemanticZoom>
</Grid>
然後分別在這兩個檢視中新增你想要加入的東西。這裡的核心就是,ZoomedOutView和ZoomedInView都是使用的同一個CollectionViewSource物件作為自己的資料集的。而這個屬性我們在上一節談到過:【萬里征程——Windows App開發】ListView&GridView之分組。
我們先把後臺程式碼寫好。我就像一篇那樣裝模作樣寫一個類吧^_^
public class Alarm
{
public string Title { get; set; }
public DateTime AlarmClockTime { get; set; }
public string Description { get; set; }
}
然後用一個函式來新增一大堆資料……一大堆資料。
private Alarm[] AddAlarmData()
{
return new Alarm[]
{
new Alarm {Title="Alarm 1",AlarmClockTime=globalTime.AddHours(17),Description="First Alarm for Study" },
new Alarm {Title="Alarm 2",AlarmClockTime=globalTime.AddHours(2),Description="Second Alarm for Study" },
new Alarm {Title="Alarm 3",AlarmClockTime=globalTime.AddHours(7),Description="Third Alarm for Study" },
new Alarm {Title="Alarm 4",AlarmClockTime=globalTime.AddHours(4),Description="4th Alarm for Study" },
new Alarm {Title="Alarm 5",AlarmClockTime=globalTime.AddHours(5),Description="First Alarm for Fun" },
new Alarm {Title="Alarm 6",AlarmClockTime=globalTime.AddHours(1),Description="First Alarm for Fun" },
new Alarm {Title="Alarm 7",AlarmClockTime=globalTime.AddHours(15),Description="Second Alarm for Fun" },
new Alarm {Title="Alarm 8",AlarmClockTime=globalTime.AddHours(9),Description="Third Alarm for Fun" },
new Alarm {Title="Alarm 9",AlarmClockTime=globalTime.AddHours(20),Description="4th Alarm for Fun" },
new Alarm {Title="Alarm 10",AlarmClockTime=globalTime.AddHours(14),Description="Second Alarm for Sleep" },
new Alarm {Title="Alarm 11",AlarmClockTime=globalTime.AddHours(9),Description="First Alarm for Sleep" }
};
}
因為我們最後要把放大檢視變成縮小檢視,記得縮小檢視上面有一些ABCD之類的字母麼,這裡我們用的是時間,就分成中午晚上等好啦。就通過下面這樣的一個函式來搞定。其用了一個鍵值對,用time作為引數。後面再將這些資料篩選出來,繫結到新新增的CollectionViewSource中。至於gridView1和gridView2是即將新增到XAML中,這裡可以先不填,一回再補上。
Func<int, string> SwitchTime = (time) =>
{
if (time <= 10 && time >= 6)
return "上午";
else if (time > 10 && time < 14)
return "中午";
else if (time >= 14 && time <= 20)
return "下午";
else
return "晚上";
};
var varTime = from t in AddAlarmData()
orderby t.AlarmClockTime.Hour
group t by SwitchTime(t.AlarmClockTime.Hour);
CollectionViewSource collectionVS = new CollectionViewSource();
collectionVS.IsSourceGrouped = true;
collectionVS.Source = varTime;
this.gridView1.ItemsSource = collectionVS.View.CollectionGroups;
this.gridView2.ItemsSource = collectionVS.View;
我們先來寫主檢視(也就是放大檢視)。
<GridView x:Name="gridView2" IsSwipeEnabled="True" HorizontalAlignment="Center" VerticalAlignment="Center" ScrollViewer.IsHorizontalScrollChainingEnabled="False" Width="1800" Height="1000">
<GridView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Margin="12" HorizontalAlignment="Left" Background="White">
<TextBlock Text="{Binding Title}" TextWrapping="Wrap" Foreground="Red" FontFamily="Harrington"
Width="150" Height="100" FontSize="26" FontWeight="Light"/>
<TextBlock Text="{Binding AlarmClockTime}" Foreground="Red" TextWrapping="Wrap" Width="150" Height="100" FontFamily="Harrington" FontSize="26" FontWeight="Light"/>
<TextBlock Text="{Binding Description}" Foreground="Red" TextWrapping="Wrap" Width="150" Height="100" FontFamily="Harrington" FontSize="26" FontWeight="Light"/>
</StackPanel>
</DataTemplate>
</GridView.ItemTemplate>
<GridView.ItemsPanel>
<ItemsPanelTemplate>
<ItemsWrapGrid MaximumRowsOrColumns="8"/>
</ItemsPanelTemplate>
</GridView.ItemsPanel>
<GridView.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<TextBlock Text='{Binding Key}' Foreground="{StaticResource ApplicationForegroundThemeBrush}" Margin="12" FontSize="30" FontFamily="華文彩雲" FontWeight="ExtraBold" />
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</GridView.GroupStyle>
</GridView>
相信大家都能看得懂,另外稍後我會在截圖中新增一些註釋的哦。然後是縮小檢視。
<GridView Name="gridView1" Background="Wheat" ScrollViewer.IsHorizontalScrollChainingEnabled="False" HorizontalAlignment="Center" VerticalAlignment="Center" Width="600" Height="200">
<GridView.ItemTemplate>
<DataTemplate>
<TextBlock Width="100" Height="100" Text="{Binding Group.Key}" FontFamily="華文行楷" FontWeight="Normal" FontSize="24" />
</DataTemplate>
</GridView.ItemTemplate>
<GridView.ItemsPanel>
<ItemsPanelTemplate>
<ItemsWrapGrid ItemWidth="100" ItemHeight="100" MaximumRowsOrColumns="2"/>
</ItemsPanelTemplate>
</GridView.ItemsPanel>
<GridView.ItemContainerStyle>
<Style TargetType="GridViewItem">
<Setter Property="Margin" Value="12" />
<Setter Property="Padding" Value="3" />
<Setter Property="BorderThickness" Value="1" />
<Setter Property="Background" Value="Green"/>
</Style>
</GridView.ItemContainerStyle>
</GridView>
那麼程式碼就到這裡為止了,接下來自然就是截圖了。
(這種圖片如果看不清的話可以儲存到電腦上再看。)
那麼這篇部落格就結束啦,再次感謝大家的支援!關於這些字型呢,大家可以看這篇:【萬里征程——Windows App開發】使用華麗麗的字型。
為使本文得到斧正和提問,轉載請註明出處:
http://blog.csdn.net/nomasp
相關文章
- iOS開發之APP內部切換語言iOSAPP
- iOS學習筆記04 檢視切換iOS筆記
- idea 中maven檢視 切換離線模式IdeaMaven模式
- 檢視Oracle的redo日誌切換頻率Oracle
- (開發必看)windows檢視埠號使用情況Windows
- Flutter自定義實現神奇的卡片切換檢視Flutter
- 檢視oracle的redo日誌組切換頻率Oracle
- 視訊場景切換檢測的FPGA實現FPGA
- win10如何快速切換軟體 windows10怎麼切換軟體視窗Win10Windows
- 開啟、關閉、切換App以及清除App程序,操作so easy!APP
- 開啟、關閉、切換 App 以及清除 App 程序,操作 so easy!APP
- nvm for windows切換node版本無效Windows
- 切換Windows的系統語言Windows
- windows/linux下nvm管理nodeJS切換WindowsLinuxNodeJS
- 關於開發檢視
- 安卓-自動切換APP圖示安卓APP
- app 測試環境切換問題APP
- AltTab 6.7.4 讓你體驗Windows的alt-tab視窗切換功能Windows
- windows檢視埠占用Windows
- 切換代理IP時如何檢查IP?
- ApkAnalyser-APP開發框架分析器,檢視APP是用Flutter還是ReactNative或是WeexAPKAPP框架FlutterReact
- 效能測試必備知識(6)- 如何檢視“CPU 上下文切換”
- Android 實現APP可切換多語言AndroidAPP
- Mac APP快速啟動及切換神器:ManicoMacAPP
- 應用程式切換工具:rcmd–App Switcher for MacAPPMac
- Manico for Mac APP快速啟動及切換神器MacAPP
- vue元件開發練習–焦點圖切換Vue元件
- windows檢視wifi密碼WindowsWiFi密碼
- windows 下檢視埠占用Windows
- 在windows下切換node版本,很簡單!Windows
- JDK Windows 安裝配置以及多版本切換JDKWindows
- 怎麼檢視電腦是windows幾 檢視電腦windows版本的方法Windows
- 2023整裝待發,開啟新的征程
- git檢視遠端地址,更新程式碼,提交程式碼,切換分支命令總結Git
- iOS開發-檢視與檢視控制器生命週期iOS
- windows10怎麼切換使用者_win10切換使用者的方法WindowsWin10
- windows怎麼切換回蘋果系統(電腦雙系統切換系統方法)Windows蘋果
- 安卓開發:viewpager + fragment 實現滑動切換安卓ViewpagerFragment
- windows10登入介面切換使用者怎麼操作_win10開機介面如何切換使用者WindowsWin10