커스텀 루티드명령어를 WPF에 추가하려면 어떻게 해야 하나요?
메뉴와 서브메뉴가 포함된 어플리케이션이 있습니다.잘라내기, 복사 및 붙여넣기 등의 하위 메뉴 항목에 Application 명령어를 첨부했습니다.
어플리케이션 명령어가 없는 다른 메뉴 항목도 있습니다.
이러한 서브메뉴 항목에 커스텀명령어 바인딩을 추가하려면 어떻게 해야 합니까?
이 기사를 검토했지만 서브메뉴 항목에 이벤트를 첨부할 수 없습니다.
Window1 클래스(또는 윈도 클래스 이름이 붙은 것) 뒤에 배치하는 스태틱클래스를 사용하여 루티드클래스의 인스턴스를 만듭니다.UICommand 클래스:
public static class Command {
public static readonly RoutedUICommand DoSomething = new RoutedUICommand("Do something", "DoSomething", typeof(Window1));
public static readonly RoutedUICommand SomeOtherAction = new RoutedUICommand("Some other action", "SomeOtherAction", typeof(Window1));
public static readonly RoutedUICommand MoreDeeds = new RoutedUICommand("More deeds", "MoreDeeeds", typeof(Window1));
}
Window1 클래스가 속한 네임스페이스를 사용하여 창 마크업에 네임스페이스를 추가합니다.
xmlns:w="clr-namespace:NameSpaceOfTheApplication"
이제 응용 프로그램명령어와 마찬가지로 명령어의 바인딩을 작성할 수 있습니다.
<Window.CommandBindings>
<CommandBinding Command="ApplicationCommands.Open" Executed="CommandBinding_Open" />
<CommandBinding Command="ApplicationCommands.Paste" Executed="CommandBinding_Paste" />
<CommandBinding Command="w:Command.DoSomething" Executed="CommandBinding_DoSomething" />
<CommandBinding Command="w:Command.SomeOtherAction" Executed="CommandBinding_SomeOtherAction" />
<CommandBinding Command="w:Command.MoreDeeds" Executed="CommandBinding_MoreDeeds" />
</Window.CommandBindings>
메뉴의 바인딩을 사용합니다.다음은 예를 제시하겠습니다.
<MenuItem Name="Menu_DoSomething" Header="Do Something" Command="w:Command.DoSomething" />
이러한 명령어를 스태틱클래스로 정의하는 것이 아니라 XAML로 직접 선언하는 것이 좋습니다.예: (Guffas nice 예에서 인용)
<Window.Resources>
<RoutedUICommand x:Key="DoSomethingCommand" Text="Do Something" />
<RoutedUICommand x:Key="DoSomethingElseCommand" Text="Do Something Else" />
</Window.Resources>
<Window.CommandBindings>
<CommandBinding Command="{StaticResource DoSomethingCommand}" Executed="CommandBinding_DoSomething" />
<CommandBinding Command="{StaticResource DoSomethingElseCommand}" Executed="CommandBinding_DoSomethingElse" />
</Window.CommandBindings>
...
<MenuItem Name="Menu_DoSomething" Header="Do Something" Command="{StaticResource DoSomethingCommand}" />
제 답변이 너무 늦었다는 것을 알지만, 그것이 미래에 도움이 되었으면 합니다.
I Like Guffa와 Heinzi의 답변은 좋지만 이전 결과를 얻기 위해서는 하나의 명령어만 사용할 수 있습니다.보통 Help 명령을 사용합니다.
<Window.CommandBindings>
<CommandBinding Command="{StaticResource Help}" Executed="HelpExecuted" />
</Window.CommandBindings>
각 호출에서 Command Parametersr를 사용합니다.
<Window.InputBindings>
<KeyBinding Command="{StaticResource Help}" Key="A" Modifiers="Ctrl" CommandParameter="Case1"/>
<KeyBinding Command="{StaticResource Help}" Key="B" Modifiers="Ctrl" CommandParameter="Case2"/>
<KeyBinding Command="{StaticResource Help}" Key="C" Modifiers="Ctrl" CommandParameter="Case3"/>
<KeyBinding Command="{StaticResource Help}" Key="D" Modifiers="Ctrl" CommandParameter="Case4"/>
<MouseBinding Command="{StaticResource Help}" MouseAction="LeftDoubleClick" CommandParameter="Case5" />
</Window.InputBindings>
또는
<Button Command="Help" CommandParameter="Case6" Content="Button">
<Button.InputBindings>
<KeyBinding Command="{StaticResource Help}" Gesture="Ctrl+D" CommandParameter="Case7"/>
</Button.InputBindings>
</Button>
및 cs 파일에 있습니다.
private void HelpExecuted(object sender, ExecutedRoutedEventArgs e)
{
string str = e.Parameter as string;
switch (str)
{
case null://F1 Pressed default Help
//Code
break;
case "Case1":
//Code
break;
case "Case2":
//Code
break;
case "Case3":
//Code
break;
case "Case4":
break;
case "Case5":
//Code
break;
case "Case6":
//Code
break;
case "Case7":
//Code
break;
}
e.Handled = true;
}
MVVM 패턴을 사용하는 경우
private void HelpExecuted(object sender, ExecutedRoutedEventArgs e)
{
string str = e.Parameter as string;
Mvvm_Variable.Action(Input: str);
e.Handled = true;
}
스위치를 View Module 사이트로 이동합니다.및 Action은 동일한 ViewModule 클래스의 메서드입니다.
언급URL : https://stackoverflow.com/questions/601393/how-do-i-add-a-custom-routed-command-in-wpf
'IT' 카테고리의 다른 글
PowerShell을 사용하여 파일에서 읽기 전용 속성을 삭제하는 방법 (0) | 2023.04.18 |
---|---|
★★★★★★★★★★★★★★★★★」 ★★★★★★★★★★★★★★★★★」 ★★★★★★★★★★★★★★★★★」? (0) | 2023.04.18 |
Windows에서 PATH에 Python 추가 (0) | 2023.04.18 |
MS Excel이 PC에 존재하는지 프로그래밍 방식으로 확인하는 방법 (0) | 2023.04.13 |
Git: 마스터에서 스테이징되지 않은/커밋되지 않은 변경으로 브랜치를 만듭니다. (0) | 2023.04.13 |