WPF使用選單實現頁面跳轉
1、Menu的使用
1.1 MenuData.xml檔案
1.2 前臺程式碼<?xml version="1.0" encoding="utf-8" ?> <Data xmlns=""> <Operation Name="部門管理" Gesture="F" Ico="/Images/out.ico"> <Operation Name="部門列表" Gesture="Control+P" Uid="/Department/DpmtList.xaml" Model="Jump"/> <Operation Name="新增部門" Gesture="Control+W" Uid="/Department/AddDpmt.xaml" Model="Show"/> </Operation> <Operation Name="員工管理" Gesture="E" Ico="/Images/admin.ico"> <Operation Name="員工列表" Gesture="Control+C" Uid="/Employee/EmpList.xaml" Model="Jump"/> <Operation Name="新增員工" Gesture="Control+X" Uid="/Employee/AddEmp.xaml" Model="Show"/> </Operation> </Data>
<Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:WpfApplication1" Title="選單" Height="500" Width="800" WindowStartupLocation="CenterScreen"> <Window.Resources> <!--資料來源--> <XmlDataProvider x:Key="dsMenu" Source="MenuData.xml" XPath="Data/Operation" /> <!--選單模板--> <HierarchicalDataTemplate DataType="Operation" ItemsSource="{Binding XPath=Operation}"> <StackPanel Orientation="Horizontal"> <Image Source="{Binding
[email protected]}" Height="24" Width="24" Margin="10,0" /> <TextBlock Text="{Binding [email protected]}" Margin="10,0"/> <TextBlock Text="{Binding [email protected]}" /> </StackPanel> </HierarchicalDataTemplate> </Window.Resources> <Grid> <Grid.RowDefinitions> <RowDefinition Height="24"/> <RowDefinition/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition/> </Grid.ColumnDefinitions> <!--選單--> <StackPanel Grid.Row="0" MenuItem.Click="StackPanel_Click_1"> <Menu ItemsSource="{Binding Source={StaticResource dsMenu}}"/> </StackPanel> <!--顯示內容--> <Frame Grid.Row="1" x:Name="mainFrame" Source="/Index.xaml" NavigationUIVisibility="Hidden"/> </Grid> </Window>
1.3 後臺程式碼
/// <summary>
/// 選單點選事件
/// </summary>
private void StackPanel_Click_1(object sender, RoutedEventArgs e)
{
MenuItem mi = e.OriginalSource as MenuItem;
XmlElement xe = mi.Header as XmlElement;
string name = xe.Attributes["Name"].Value;
string uid = xe.Attributes["Uid"].Value;
string model = xe.Attributes["Model"].Value;
//Jump:使用Frame跳轉頁面;Show:使用NavigationWindow彈出頁面
if (model == "Jump")
{
JumpPage(uid);
}
else if (model == "Show")
{
ShowPage(Name, uid);
}
}
/// <summary>
/// 使用Frame跳轉頁面
/// </summary>
private void JumpPage(string uid)
{
if (!String.IsNullOrWhiteSpace(uid))
{
this.mainFrame.Navigate(new Uri(uid, UriKind.Relative));
}
}
/// <summary>
/// 使用NavigationWindow彈出頁面
/// </summary>
private void ShowPage(string title,string uri)
{
NavigationWindow window = new NavigationWindow();
window.Title = title;
window.Width = 300;
window.Height = 200;
window.WindowStartupLocation = WindowStartupLocation.CenterScreen;
window.ResizeMode = ResizeMode.NoResize;
window.Source = new Uri(uri, UriKind.Relative);
window.ShowsNavigationUI = false;
window.Show();
}
2、TreeView的使用
2.1 前臺程式碼
<Window x:Class="WpfApplication1.Test.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="選單" Height="500" Width="800" WindowStartupLocation="CenterScreen">
<Window.Resources>
<!--選單樣式-->
<Style TargetType="{x:Type TreeView}">
<Setter Property="Height" Value="550"/>
<Setter Property="FontSize" Value="14"/>
<Setter Property="Background" Value="#059ad7"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Padding" Value="5,10,0,0"/>
</Style>
<!--選單項樣式-->
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="FontSize" Value="16"/>
<Setter Property="Padding" Value="5"/>
<Setter Property="Cursor" Value="Hand"/>
</Style>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="190"/>
<ColumnDefinition Width="3"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<!--選單-->
<StackPanel Grid.Column="0" Background="#059ad7">
<TreeView x:Name="tvMenu" SelectedItemChanged="TreeView_SelectedItemChanged">
<TreeViewItem Header="選單" IsExpanded="True" >
<TreeViewItem Header="部門管理" IsExpanded="True" >
<TreeViewItem Header="部門列表" Uid="/Department/DpmtList.xaml"/>
<TreeViewItem Header="新增部門" Uid="/Department/AddDpmt.xaml"/>
</TreeViewItem >
<TreeViewItem Header="員工管理" IsExpanded="True">
<TreeViewItem Header="員工列表" Uid="/Employee/EmpList.xaml"/>
<TreeViewItem Header="新增員工" Uid="/Employee/AddEmp.xaml"/>
</TreeViewItem >
</TreeViewItem>
</TreeView>
</StackPanel>
<!--隔欄-->
<GridSplitter Grid.Column="1" VerticalAlignment="Stretch" HorizontalAlignment="Center" Background="#c3c1c1" ShowsPreview="True" Width="3" />
<!--中間內容-->
<Frame Grid.Column="3" x:Name="mainFrame" Source="/Index.xaml" NavigationUIVisibility="Hidden"/>
</Grid>
</Window>
2.2 後臺程式碼
/// <summary>
/// 選單跳轉事件
/// </summary>
private void TreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
TreeView tvMenu = sender as TreeView;
TreeViewItem tvItem = tvMenu.SelectedItem as TreeViewItem;
string uid = tvItem.Uid;
if (!String.IsNullOrWhiteSpace(uid))
{
this.mainFrame.Navigate(new Uri(uid, UriKind.Relative));
}
}
3、其他內容
1、Menu
- Menu 是水平放置它的項的,預設情況下把灰色欄作為背景。
- 把Menu 新增到它的ItemsControl 基類的唯一公開的API 是IsMainMenu 屬性。當為true(預設的)時,使用者按下Alt 或者F10 鍵,選單獲得焦點。
- MenuItem 是帶頭的Items 控制元件(繼承自HeaderedItemControl),它的頭實際上是主物件。如果Items 是子元素的話就會被作為
子選單顯示。MenuItem 使用下劃線字首來支援訪問鍵(access key)。 - Separator(分隔線)是一種簡單控制元件。
- Icon——允許把任意型別的物件新增到Header 旁邊。Icon 物件會像Header 一樣被渲染,儘管它通常是一幅小圖片。
- IsCheckable——讓MenuItem 的行為像一個CheckBox 控制元件。
- InputGestureText——用一個相關的手勢(gesture)來標識一個項(最常見的就是鍵盤快捷方式,比如Ctrl+O)。
- 5個事件:Checked、Unchecked、SubmenuOpened、SubmenuClosed 和Click。
- 要為MenuItem 設定一個鍵盤快捷鍵,你應該用它的Command 屬性。
2、ContextMenu(上下文選單)
- 是一種儲存MenuItem 和Separator 的簡單容器。但不能直接把ContextMenu 嵌入到一個元素樹中,必須通過一個適當的屬性把它載入到控制元件上。
- IsOpen 屬性以及Opened/Closed 事件。
- 預設情況下,選單左上角位於滑鼠指標處,但是可以把它的Placement 改成一個非MousePoint 的值(如Absolute),或者設定它的HorizontalOffset 以及VerticalOffset 屬性,來調整這個行為。
- ContextMenuService 靜態類,它包含了許多附加屬性,分別對應那些由ContextMenu 直接定義的屬性。
A、TreeViewB、ToolBar
- 用可展開和摺疊的節點來分層顯示資料。
- 在TreeView 中一定要顯式地用TreeViewItem 包裝Item,用TreeViewItem來填充,TreeViewItem 就像MenuItem 一樣,是一種帶有頭的控制元件,它的Header 屬性包含著當前的項,而它的Items 集合中儲存著子項(子項也是TreeViewItem)。
- TreeViewItem 有兩個方便的屬性IsExpanded 和IsSelected。還有4 個事件,分別對應於這兩個屬性的4種狀態:Expanded、Collapsed、Selected 和Unselected。
- 同樣支援富鍵盤導航,加號和減號鍵可以展開或摺疊一個項,箭頭方向鍵、Page Up、Page Down、Home 和End 鍵可以從一個項向另一個項移動焦點。
C、StatusBar
- 對許多小的按鈕(或者其他控制元件)進行分組。
- ToolBar 可以被放在元素樹的任何地方,但是通常把它們放在一個叫作ToolBarTray 的FrameworkElement 中。
- 使用者就可以拖曳ToolBar 或重新定義ToolBar,。除非ToolBarTray的IsLocked 屬性被設定為true。
- ToolBarTray 有一個Orientation 屬性,可以把它設定為Vertical 使其所有的ToolBar 垂直排列項。
- 預設都是最後一個元素第一個被移到溢位區域,但是你能通過OverflowMode 附加屬性來控制每個項的溢位行為。有了這個屬性,你就可以把一個項標記為AsNeeded(預設,按需要溢位)、Always 或Never。
- System.Windows.Input 名稱空間中的KeyboardNavigat ion 類定義了一些用來自定義鍵盤行為的附加屬性。
- ToolBar 實際上是一個帶有頭的Item 控制元件(就像MenuItem 和TreeViewItem)。它的Header 屬性從來不會被顯示,但是它可以被用來實現ToolBarTray 的其他特性。
- StatusBar 的行為就像Menu,它只是水平排列放它的項,通常用在視窗底部,以顯示狀態資訊。
- StatusBar 為Separator 提供了一個控制元件模板,Separator 是作為垂直線被渲染的。
- StatusBar 中的項(除了Separator)是被隱式地包裝在一個StatusBarItem 中,但是你依然能顯式地進行包裝。
相關推薦
WPF使用選單實現頁面跳轉
1、Menu的使用 1.1 MenuData.xml檔案 <?xml version="1.0" encoding="utf-8" ?> <Data xmlns=""> <Operation Name="部門管理" Gesture="F"
js實現頁面跳轉選單選中
<div class="headerpanel"> <div class="headerlist"> <ul> <li class="active" role="cashierMenu
php中實現頁面跳轉的幾種方式
腳本 timeout location clas replace asc idt lee 實現 親測,not復制粘貼 PHP中實現頁面跳轉有一下幾種方式,看了幾個人寫的不是很條理,自己整理一下 在PHP腳本代碼中實現 <?php header("locati
ui li 形式的菜單 實現頁面跳轉
頁面跳轉 app /*跳轉*/ jumpEditRectificatBill:function(){ $("#getEquipLegerFrom li").each(function(){ //var jumpid=$(this).attr("id")
用js實現頁面跳轉的幾種方式
head 註意 ont rem text pla http bsp cat 通過js或者html或者PHP等動態程序都可以方便的實現跳轉,這裏搜集了幾種頁面跳轉的方式js方式的頁面跳轉1.window.location.href方式 <script langua
ASP.NET MVC中如何實現頁面跳轉
pub ring 項目 再見 name ati 方法 技術 mod 1,最簡單的方式:超鏈接 以下分別是連接到HomeController控制器下的SharpL動作方法,以及百度首頁。代碼如下: 1 <a href="Home\SharpL">打開S
php實現頁面跳轉方法彙總
一共有三種方法實現頁面跳轉,分別利用php提供的header()、html meta標籤、JavaScript指令碼。 header() header()方法通過設定http響應頭中的location域實現跳轉。這種跳轉實現對使用者是不可見的,有瀏覽器直接執行
實現頁面跳轉——Intent
Intent可以理解為信使(意圖),由Intent來協作完成Android各個元件之間的通訊。 Intent實現頁面跳轉 1.直接實現A頁面跳轉到B頁面:startActivity(intent) 2.直接A啟動B頁面,切B頁面可以把資料回傳給A:startActivi
Axure中實現頁面跳轉倒計時
在瀏覽一個頁面時,如果跳轉到下一個頁面,一般需要等待幾秒,有些網站就會產生倒計時等待的狀態,這樣一個效果暫且稱為Axure頁面跳轉倒計時。在Axure(http://www.axurechina.cc/)中要實現這樣一個效果需要用到幾個簡單的互動效果,以下將是具體操作流程。關於頁面跳轉的設定
AngularJS進階 八 實現頁面跳轉並進行參數傳遞
res 初始化 .get web js進階 頁面 city 過程 元素 angularjs實現頁面跳轉並進行參數傳遞 註:請點擊此處進行充電! Angular頁面傳參有多種辦法,我在此列舉4種最常見的: 1. 基於ui-router的頁面跳轉傳參 (1) 在Angular
AngularJS進階 八 實現頁面跳轉並進行引數傳遞
angularjs實現頁面跳轉並進行引數傳遞 注:請點選此處進行充電! Angular頁面傳參有多種辦法,我在此列舉4種最常見的: 1. 基於ui-router的頁面跳轉傳參 (1) 在AngularJS的app.js中用ui-router定義路由,比如現在
微信小程式例子——點選文字實現頁面跳轉
1、效果展示 .w 2、關鍵程式碼 index.js檔案 Page({ data:{ // text:"這是一個頁面" }, onLoad:function(options){
使用AJAX實現頁面跳轉
$.ajax({ type:"POST", url: //你的請求程式頁面隨便啦 async:false,//同步:意思是當有返回值以後才會進行後面的js程式。 dat
Springboot中使用thymeleaf模板引擎實現頁面跳轉
1、建立一個Springboot專案2、在pom.xml中加入thymeleaf模板引擎的依賴 <!-- springboot web開發thymeleaf模板 --> <depend
Java後端實現頁面跳轉
頁面跳轉分類有兩種:重定向和轉發,即redirect和forward。具體區別和含義最後介紹,先給出使用方法。一:重定向redirect 第一種方式:controller中返回值為Stringpublic String login(HttpServletRequest
Vue整合vue-router實現頁面跳轉出現的問題
1、配置router資料夾下index.js,配置方式一 import Vue from 'vue' import Router from 'vue-router' Vue.use(Router) const routes = [ { path: '/', // 首頁
Laravel通過ajax的POST方式傳值並實現頁面跳轉
1.新增測試按鈕 <button class='test' >ajax測試</button> 2.ajax部分程式碼 @section('js') <scr
vue三種不同方式實現頁面跳轉
Vue:router-lin <router-link to="/">[跳轉到主頁]</router-link> <router-link to="/login">[登入]</router-link> <router-li
swift UI專項訓練42 用Swift程式碼實現頁面跳轉與傳值
之前我們做過如果要點選一個按鈕實現跳轉到另一個按鈕的辦法,有時候我們需要通過一些動作來觸發頁面的跳轉,比如搖動手機,這樣就不能直接用連線的辦法來實現跳轉了,那麼如何通過程式碼的方式來實現跳轉呢?依舊使用過渡的方法,在storyboard中把要實現跳轉的兩張頁面連線,注
Navigator實現頁面跳轉
reaact-native version:0.57 app.js /** * Sample React Native App * https://github.com/facebook/rea