WPF命令

来源:https://www.cnblogs.com/wzmcnblogs/archive/2022/04/23/16183586.html
-Advertisement-
Play Games

理解命名 新特性:1、將事件委托到適當的命令 2、使控制項的啟用狀態和相應命令的狀態保持同步 命令:表示應用程式任務,並且跟蹤任務是否能夠被執行,然而,命令實際上不包含執行應用程式任務的代碼。 命令綁定:每個命令綁定針對用戶界面的具體區域,將命令連接到相關的應用程式邏輯。 命令源:命令源觸發命令。 命 ...


理解命名

新特性:1、將事件委托到適當的命令 2、使控制項的啟用狀態和相應命令的狀態保持同步

命令:表示應用程式任務,並且跟蹤任務是否能夠被執行,然而,命令實際上不包含執行應用程式任務的代碼。

命令綁定:每個命令綁定針對用戶界面的具體區域,將命令連接到相關的應用程式邏輯。

命令源:命令源觸發命令。

命令目標:執行命令的元素。

ICommand介面

WPF命令模型核心是System.Windows.Input.ICommand介面

public interface ICommand
{
    event EventHandler CanExecuteChanged;
    
    bool CanExecute(object parameter);
    void Execute(object parameter);
}

Excute()方法包含應用程式任務邏輯。CanExecute()方法返回命令的狀態,當命令可用時命令源啟用自身,不可用時禁用自身。具體實現可以參考MvvmLight源碼。CommandManager.InvalidateRequerySuggested(); 刷新命令狀態。

RoutedCommandRoutedUICommand

RoutedCommand實現ICommandtarget是處理事件的元素。

public bool CanExecute(object parameter, IInputElement target)
{
	throw null;
}
public void Execute(object parameter, IInputElement target)
{
}

RoutedUICommand:RoutedCommand,應用程式處理的大部分命令是RoutedUICommand

命令庫

WPF提供了一個基本命令庫。ApplicationCommands、NavigationCommands、EditingCommands、ComponentCommands、MediaCommands通過以上靜態類的靜態屬性提供。

ApplicationCommand.Open示例:

<!--XAML代碼實現--> 
<!--<Window.InputBindings>
        <KeyBinding
            Key="O" Command="ApplicationCommands.Open"
            Modifiers="Ctrl" />
    </Window.InputBindings>-->
    <Window.CommandBindings>
        <CommandBinding
            CanExecute="CommandBinding_CanExecute"
            Command="ApplicationCommands.Open"
            Executed="CommandBinding_Executed" />
    </Window.CommandBindings>

  <Grid>
        <StackPanel>
            <Button
                Width="100"
                Height="20"
                Command="ApplicationCommands.Open"
                Content="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Command.Text}" />
        </StackPanel>
    </Grid>

代碼實現為:

//C#代碼實現
//KeyBinding keyBinding = new KeyBinding(ApplicationCommands.Open, Key.O, ModifierKeys.Control);
//this.InputBindings.Add(keyBinding);
CommandBinding commandBinding = new CommandBinding(ApplicationCommands.Open, CommandBinding_Executed, CommandBinding_CanExecute);
this.CommandBindings.Add(commandBinding);

private void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e)
{
	MessageBox.Show(e.Source.ToString());
}  
private void CommandBinding_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
	e.CanExecute = true;
}

通過觀察彈出視窗信息,可以知道通過點擊按鈕彈出和快捷鍵彈出的命令源是不同的,分別button和window,命令庫中的一些命令可以被自動映射到指定的組合鍵,如ApplicationCommands.Open被映射到Ctrl+O組合鍵。

WPF命令庫命令可以簡寫為

<Button Command="Open"/>

命令源

實現ICommandSource介面的對象

public interface ICommandSource
{
    //指向鏈接的命令
	ICommand Command {get;}
    //命令參數
	object CommandParameter {get; }
    //執行命令的元素
	IInputElement CommandTarget {get;}
}

內置命令的控制項

例如,TextBox類處理CutCopyPaste命令以及來自EditingCommand的一些命令。ToolBar和Menu控制項可以將它的子元素的CommanTarget屬性自動設置為具有焦點的空間。其他容器中則要手動設置CommandTarget屬性,或者使用FocusManager.IsFocusScope附加屬性。

 <Button Command="Copy" CommandTarget="{Binding ElementName=textBox}" />

<!--FocusManager.IsFocusScope 在父元素的焦點範圍中查找-->
<StackPanel FocusManager.IsFocusScope="True">
   <Button Command="Cut" />
    <Button Command="Copy"  />
    <Button Command="Paste"  />
</StackPanel>

內置屬性控制項可以通過IsUndoEnable屬性來移除內置命令,或者通過CommandBindingKeyBindind來禁用命令。

本文來自博客園,作者:藍白永恆,轉載請註明原文鏈接:https://www.cnblogs.com/wzmcnblogs/p/16183586.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 在一個Web應用中,通常會採用MVC設計模式實現對應的模型、視圖和控制器,其中,視圖是用戶看到並與之交互的界面。對最初的Web應用來說,視圖是由HTML元素組成的靜態界面;而後期的Web應用更傾向於使用動態模板技術,從而實現前後端分離和頁面的動態數據展示。Spring Boot框架為簡化項目的 ...
  • 最近的項目搗鼓msp430需要用到dac轉換以輸出模擬信號,項目代碼是接手前同事的 有些地方調試不通,以前沒有接觸過msp430晶元,更是沒搞過這種晶元io口時序驅動層的東西,甚至純c的都是頭一次作為工作正式用。沒辦法 萬事開頭難嘛 ,硬著頭皮網上到處翻資料 找晶元的手冊 找dac外設的寄存器說明, ...
  • 當我們電腦裡面的文本或者或者文件夾太多了,有時候想找到自己想要的文件,只能通過去搜索文件名,要是名字忘記了的話,那你也搜不了吧,當然你可通過尾碼名去搜索,但是通過搜索出來的文件只會更多,這還只是文件多的情況下。 如果文件名字基本一樣,只有序號不一樣呢?那特麽眼睛看瞎了估計還沒找到。 那麼我們可以用P ...
  • 前言 在實際開發中,經常需要將一組(不只一個)數據存儲起來,以便後邊的代碼使用。在VBA中有使用數組,可以把多個數據存儲 到一起,通過數組下標可以訪問數組中的每個元素。Python 中沒有數組,但是加入了更加強大的列表(list)。下麵就對列表的內 置方法進行介紹。 通過dir(list)可以查看列 ...
  • DQ41Y、DQ41F、DQ61Y、DQ61F低溫球閥適用於低溫液體貯運設備的管理系統,具有開關靈活、密封可靠的特點,也可用於其他低溫和深冷介質的管理系統。 ...
  • Q41H硬密封球閥適用於Class150~Class2500、PN16~PN160的各種管路上,用於截斷或接通管路中的介質。選用不同的材質,硬密封球閥可分別適用於非腐蝕型介質、弱腐蝕性介質、硝酸、醋酸、氧化性介質、尿素等多種介質,特別適用於含固體顆粒介質、料漿、煤粉、灰渣等苛刻工況。 ...
  • 練習模板(只包含了Swagger,Jwt可以直接練手):https://gitee.com/zh1446802857/swagger-multi-version-api.git Jwt在我的 認知里,是一套門鎖。別人(用戶)需要用到你的介面 的時候需要通過這個身份識別才可以使用。就像是一間房子,只有 ...
  • 今天看到已經更新了devblogs,新增的C# 11的!!(用於檢查null的語法)經過非常長的討論,最後取消了。然後我又想起來null檢查,這個可以說一說。 函數參數null檢查 傳統寫法 寫一個函數的時候,最經典的檢查,估計也是大家最常使用的null檢查,應該是這樣的吧: public stat ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...