사용자 지정 WPF 명령을 예 패턴
-
08-06-2019 - |
문제
나는 몇 가지 WPF 프로그래밍 중 하나는 일은 내가 결코 가지고 명령이었다 패턴이다.모든 예 될 것으로 보인에 내장 된 것,편집하고,절단,붙여 넣습니다.누군가는 예를 들어 또는 제안이의 최고의 실천에 대한 사용자 정의 명령을?
해결책
아 ha!질문에 답변 드리겠습니다!첫째,내가 언급해야한다는 개인적으로 쉽게 정의하고 명령보다는 코드에서 XAML.할 수 있을 걸기 위해 명령은 좀 더 유연하게보다는 모든 XAML 접근 않습니다.
야 할 무엇을 명령할 수 있고 그들이 무엇에 관한 것이다.내 응용 프로그램에서,나는 현재 클래스 정의에 대한 중요한 응용 프로그램과 같은 명령을 너무:
public static class CommandBank
{
/// Command definition for Closing a window
public static RoutedUICommand CloseWindow { get; private set; }
/// Static private constructor, sets up all application wide commands.
static CommandBank()
{
CloseWindow = new RoutedUICommand();
CloseWindow.InputGestures.Add(new KeyGesture(Key.F4, ModifierKeys.Alt));
// ...
}
기 때문에,지금 내가 원하는 코드가 모두 함께 사용,코드만이 접근을 명령할 수 있게 다음과 같은 방법에서 위의 클래스:
/// Closes the window provided as a parameter
public static void CloseWindowExecute(object sender, ExecutedRoutedEventArgs e)
{
((Window)e.Parameter).Close();
}
/// Allows a Command to execute if the CommandParameter is not a null value
public static void CanExecuteIfParameterIsNotNull(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = e.Parameter != null;
e.Handled = true;
}
두 번째 방법이 될 수 있습와 공유되지 않고 명령을 반복합니다.
을 정의하면 이와 같은 명령을 추가할 수 있습니다 그들의 어떤 조각 UI.에서는 다음을 로드,추가 명령어 바인딩을 모두 창고 MenuItem 추가 입력한 바인딩을 창을 사용하여 반복하여 이에 대한 모든 명령을 수 있습니다.전달된 매개 변수는 창의 자 그래서 위의 코드는 무엇을 알고 창을 시도하고 가깝습니다.
public partial class SimpleWindow : Window
{
private void WindowLoaded(object sender, RoutedEventArgs e)
{
// ...
this.CommandBindings.Add(
new CommandBinding(
CommandBank.CloseWindow,
CommandBank.CloseWindowExecute,
CommandBank.CanExecuteIfParameterIsNotNull));
foreach (CommandBinding binding in this.CommandBindings)
{
RoutedCommand command = (RoutedCommand)binding.Command;
if (command.InputGestures.Count > 0)
{
foreach (InputGesture gesture in command.InputGestures)
{
var iBind = new InputBinding(command, gesture);
iBind.CommandParameter = this;
this.InputBindings.Add(iBind);
}
}
}
// menuItemExit is defined in XAML
menuItemExit.Command = CommandBank.CloseWindow;
menuItemExit.CommandParameter = this;
// ...
}
// ....
}
나는 또한 다음 나중에는 이벤트에 대한 처리기 WindowClosing 및 WindowClosed 이벤트,나는 추천할 만들의 실제 구현한 명령으로 작은 일반적인으로 가능합니다.으로,이 경우에는 시도 하지 않았을 넣어하는 코드를 중지하려고 창을 닫 있는 경우에 저장하지 않은 데이터,나는 유지되는 코드 단단히 내 WindowClosing 이벤트입니다.
알려가 있는 경우 모든 후속 질문이 있습니다.:)
다른 팁
나 블로그에 대한 자원의 무리에 WPF 명령과 함께 예를 들어 작년에 http://blogs.vertigo.com/personal/alanl/Blog/archive/2007/05/31/commands-in-wpf.aspx
붙여넣기:
Adam 나의 샘플 장에서 중요한 새로운 개념에서 WPF:명령
Keyvan Nayyeri:를 추가하는 방법은 명령을 사용자 지정 WPF 컨트롤
MSDN 라이브러리:EditingCommands 클래스
MSDN 라이브러리:ApplicationCommands 클래스
MSDN 라이브러리:NavigationCommands 클래스
MSDN 라이브러리:ComponentCommands 클래스
또한 매장에서 WPF SDK 샘플이 좋은 샘플에서 컨트롤 편집하는 확장했다.당신은 여기에서 찾을 수 있습니다: RichTextEditor.zip
에서 월 2008edition MSDN 잡지,브라이언 노이스에는 훌륭한 문서에 대해 RoutedCommand/RoutedEvents!!!
여기에 링크입니다:http://msdn.microsoft.com/en-us/magazine/cc785480.aspx
일에 대한 XAML 는 미세한'단순한'프로그램이지만,슬프게도,그것은 작동하지 않을 때 당신이 일을 하고 싶으면 다음과 같 공유 기능.말이 있는 여러 클래스고 UI 의 모든다는 명령을 절대 사용할 쓰'CanAlwaysExecute'방식에 대한 각 창 또는 정렬!는 매우 건.
을 읽고 여러 블로그를 통해하려고 몇 가지,나는 선택을 XAML 순수에 대한 외모,스타일로,애니메이션과 트리거합니다.내 모든 구부리의 이벤트 처리기에 좋은 지금에 코드니다.:)
다른 잡았다는 방법에 의해 입력하는 바인딩하기 위해,그들을 위해,적발에 중점을 두어야 하는 개체를 포함하는 입력 있습니다.예를 들어,짧은 당신 언제든지 사용할 수 있습(말,F1 을 열 도),는 입력한 바인딩에서 설정해야 합창체,그 이후로 항상 초점을 때 응용 프로그램이 활성화됩니다.코드를 사용하는 방법을 확인해야는 쉽게도를 사용하여 시작할 때 UserControls 는 추가 할 수 있습니다 바인딩을 입력하여 그들의 부모는 창입니다.