WPF未定義用於事件的標記擴展,第三方能夠創建可用於事件的標記擴展。現在WPF 4.5支持事件的標記擴展。任何人都可以通過一個優雅的例子來幫助如何在.Net 4.5中實現這一點?.Net 4.5中事件的標記擴展
回答
事件標記擴展允許您爲事件使用標記擴展,直到WPF 4.5爲止,它們只能用於屬性。例如:
<Canvas ClipToBounds="True" Background="White"
MouseLeftButtonDown="{local:EventToCommand StartPaintCommand}"
MouseMove="{local:EventToCommand AddLineCommand}"
MouseLeftButtonUp="{local:EventToCommand EndPaintCommand}">
</Canvas>
可以找到一個完整的例子here。
美麗。如果只有微軟繼續在WPF中投入資金......我只希望所有這些功能都可以在WinRT中使用......或者其他任何其他未完成的框架。 –
@Adi,謝謝哥們,我已經測試了應用程序,它的工作正常 –
命令
{EB:EventBinding}(簡單的命名模式來查找命令)
{EB:EventBinding命令=的CommandName}
CommandParameter
$ E( EventAgrs)
$ this或$ this。物業
串
不錯。這是WPF缺少的一個殺手級功能。許多微軟的技術。對我沒有意義。其中最重要的是命令和事件之間的這種任意區分。用戶界面只是一個事件源,但未能提供一種可靠的方法,將大量的事件返回到視圖模型,而無需訴諸代碼。呃?他們最終的解決方案非常冗長,需要第三個圖書館......呃? ... – George
這是一個非常靈活的標記擴展我寫的,可以直接事件綁定到你的視圖模型方法的一個例子:
http://www.singulink.com/CodeIndex/post/building-the-ultimate-wpf-event-method-binding-extension
用法:
<!-- Basic usage -->
<Button Click="{data:MethodBinding OpenFromFile}" Content="Open" />
<!-- Pass in a binding as a method argument -->
<Button Click="{data:MethodBinding Save, {Binding CurrentItem}}" Content="Save" />
<!-- Another example of a binding, but this time to a property on another element -->
<ComboBox x:Name="ExistingItems" ItemsSource="{Binding ExistingItems}" />
<Button Click="{data:MethodBinding Edit, {Binding SelectedItem, ElementName=ExistingItems}}" />
<!-- Pass in a hard-coded method argument, XAML string automatically converted to the proper type -->
<ToggleButton Checked="{data:MethodBinding SetWebServiceState, True}"
Content="Web Service"
Unchecked="{data:MethodBinding SetWebServiceState, False}" />
<!-- Pass in sender, and match method signature automatically -->
<Canvas PreviewMouseDown="{data:MethodBinding SetCurrentElement, {data:EventSender}, ThrowOnMethodMissing=False}">
<controls:DesignerElementTypeA />
<controls:DesignerElementTypeB />
<controls:DesignerElementTypeC />
</Canvas>
<!-- Pass in EventArgs -->
<Canvas MouseDown="{data:MethodBinding StartDrawing, {data:EventArgs}}"
MouseMove="{data:MethodBinding AddDrawingPoint, {data:EventArgs}}"
MouseUp="{data:MethodBinding EndDrawing, {data:EventArgs}}" />
<!-- Support binding to methods further in a property path -->
<Button Content="SaveDocument" Click="{data:MethodBinding CurrentDocument.DocumentService.Save, {Binding CurrentDocument}}" />
查看模型方法簽名:
public void OpenFromFile();
public void Save(DocumentModel model);
public void Edit(DocumentModel model);
public void SetWebServiceState(bool state);
public void SetCurrentElement(DesignerElementTypeA element);
public void SetCurrentElement(DesignerElementTypeB element);
public void SetCurrentElement(DesignerElementTypeC element);
public void StartDrawing(MouseEventArgs e);
public void AddDrawingPoint(MouseEventArgs e);
public void EndDrawing(MouseEventArgs e);
public class Document
{
// Fetches the document service for handling this document
public DocumentService DocumentService { get; }
}
public class DocumentService
{
public void Save(Document document);
}
- 1. 新文件的記事本++擴展
- 2. Python C擴展和Xcode 4.5
- 3. 擴展事件 - rpc_completed
- 4. WPF |擴展事件
- 5. Chrome擴展事件
- 6. MEF擴展事件
- 7. Azure Handler映射,如何指向.net 4.5的擴展?
- 8. Chrome擴展程序 - onclick圖標事件
- 9. Chrome擴展標籤onUpdated事件
- 10. Chrome擴展鼠標滾輪事件
- 11. 擴展鼠標單擊事件 - C
- 12. 在Chrome擴展中訪問瀏覽器事件 - Chrome擴展中的DOM事件
- 13. 數據觸發中的標記擴展
- 14. 鉻標記簽署擴展
- 15. XAML:減去標記擴展
- 16. StaticResource標記擴展與System.Windows.Application.FindResource
- 17. 什麼是標記擴展?
- 18. .NET中的InstallShield擴展條件DLL
- 19. 擴展標籤上的Pango標記
- 20. .NET 2.0中的Ajax擴展?
- 21. 擴展.NET RoleProvider
- 22. Node.js的擴展.NET
- 23. 如何跟蹤擴展中的事件?
- 24. Google Chrome擴展中的Fire Keydown事件
- 25. NASM - 用位標記擴展標籤
- 26. .NET 4.5中的Websockets
- 27. PHP擴展類事件
- 28. Chrome擴展click事件
- 29. VS2010擴展 - 訂閱事件
- 30. Safari擴展事件:SafariBeforeSearchEvent
您究竟在做什麼?在XAML中註冊事件處理程序? –
賈斯廷 - 感謝您的快速響應.. http://msdn.microsoft.com/en-us/library/bb613588.aspx#events_markup_extenions我發現了一個新的功能,搜索了一些好的樣本,沒有得到任何樣本 –
@VimalCk,我也一直在努力。只需要提一下,4.5還可以讓您使用泛型來反映屬性,這會加速標記擴展! –