1. 程式人生 > >WPF使用選單實現頁面跳轉

WPF使用選單實現頁面跳轉

1、Menu的使用

1.1 MenuData.xml檔案

<?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>
1.2 前臺程式碼
<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 直接定義的屬性。
3、其他Items 控制元件
A、TreeView
  • 用可展開和摺疊的節點來分層顯示資料。
  • 在TreeView 中一定要顯式地用TreeViewItem 包裝Item,用TreeViewItem來填充,TreeViewItem 就像MenuItem 一樣,是一種帶有頭的控制元件,它的Header 屬性包含著當前的項,而它的Items 集合中儲存著子項(子項也是TreeViewItem)。
  • TreeViewItem 有兩個方便的屬性IsExpanded 和IsSelected。還有4 個事件,分別對應於這兩個屬性的4種狀態:Expanded、Collapsed、Selected 和Unselected。
  • 同樣支援富鍵盤導航,加號和減號鍵可以展開或摺疊一個項,箭頭方向鍵、Page Up、Page Down、Home 和End 鍵可以從一個項向另一個項移動焦點。
B、ToolBar
  • 對許多小的按鈕(或者其他控制元件)進行分組。
  • 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 的其他特性。
C、StatusBar
  • 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