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.
Красивая. Если бы только Microsoft продолжала вкладывать деньги в WPF ... Я просто надеюсь, что все эти функции будут доступны в WinRT ... или в какой-либо другой частичной форме, которую они придумали. –
@Adi, Спасибо, приятель, я протестировал приложение и его рабочий штраф –
Команда
{ЭБ: EventBinding} (Простой шаблон именования, чтобы найти команды)
{ЭБ: EventBinding Command = Имя_команды}
CommandParameter
$ е (EventAgrs)
$ этот или $ этот. Свойство
строка
Nice. Это была функция убийцы, отсутствующая в WPF. Большая часть технологий Microsoft. не имеет для меня никакого смысла. Не в последнюю очередь это произвольное различие между командами и событиями. UI - это просто источник событий, но неспособность обеспечить надежный сигнал - это множество событий обратно в модель представления, не прибегая к коду. Э-э? Их возможное решение было настолько подробным и требовало третьей библиотеки ... А? ... – 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);
}
Что именно вы пытаетесь достичь? Регистрация обработчика событий в XAML? –
Justin - спасибо за ваш быстрый ответ. Http://msdn.microsoft.com/en-us/library/bb613588.aspx#events_markup_extenions Я нашел новую функцию и искал несколько хороших образцов и не получал никаких образцов –
@VimalCk, я тоже работал над этим. Просто упомянем, что 4.5 также позволяет использовать дженерики в способах отражения свойств, и это ускоряет расширение разметки! –