MenuItems
이 ContextMenu
인 명령 전파에 이상한 동작이 나타납니다. ContextMenu
이 UserControl
내부 DataGrid
의 각 DataGridRow
설정되어, 나아가서 내부 AvalonDock의 DockableContent
입니다 :AvalonDock + UserControl + DataGrid + ContextMenu 명령 라우팅 문제
나는 레이아웃의 다음과 같은 종류가 있습니다. 을 제거하면 도킹 또는 UserControl
내 눈금 주위에 문제가 없습니다. DataGrid
대신 ListBox
에이 문제가 없습니다. 그래서 여기
public partial class MainWindow
{
public MainWindow()
{
InitializeComponent();
_evilGrid.ItemsSource =
new[]
{
Tuple.Create(1, 2, 3),
Tuple.Create(4, 4, 3),
Tuple.Create(6, 7, 1),
};
}
private void ExecuteZoom(object sender, ExecutedRoutedEventArgs e)
{
MessageBox.Show("zoom !");
}
private void CanZoom(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = true;
}
}
문제입니다 :
<Window x:Class="DockAndMenuTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ad="clr-namespace:AvalonDock;assembly=AvalonDock"
Title="MainWindow" Height="350" Width="525">
<ad:DockingManager>
<ad:DocumentPane>
<ad:DockableContent Title="Doh!">
<UserControl>
<UserControl.CommandBindings>
<CommandBinding Command="Zoom"
Executed="ExecuteZoom"
CanExecute="CanZoom"/>
</UserControl.CommandBindings>
<DataGrid Name="_evilGrid">
<DataGrid.Resources>
<Style TargetType="DataGridRow">
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu>
<MenuItem Command="Zoom"/>
</ContextMenu>
</Setter.Value>
</Setter>
</Style>
</DataGrid.Resources>
</DataGrid>
</UserControl>
</ad:DockableContent>
</ad:DocumentPane>
</ad:DockingManager>
</Window>
숨김 코드는 사소한뿐만 아니라입니다 (이 경우는 마우스 오른쪽 버튼을 클릭하기 전에 선택한) 내 명령이 비활성화 나오는 선택한 행을 마우스 오른쪽 버튼으로 클릭 . 이 경우 명령은 "확대/축소"되지만 사용자 정의 커맨드를 포함하여 다른 명령이 될 수 있습니다.
여기에 무엇이 잘못 됐는지 나는 알지 못합니다. SNOOP는이 전파가 실패한 경우 UserControl
대신 CanExecute
이 도킹 헤더의 일부인 "PART_ShowContextMenuButton"(Button)에 의해 처리됨을 보여줍니다.
나는 AvalonDock 내부에서 호스팅되는 UserControls
내의 UI 명령 전파와 관련하여 다른 문제가 있었지만이 중 하나를 재현하는 것이 가장 쉽습니다.
정확히 이렇게 문제가 해결되지 않았지만, 몇 후 더 많은 시간을 파고 내 사건에 대한 해결책을 찾았습니다. UserControl 수준 ( ...)에서 포커스 범위를 만들었으며 명령 이벤트가 제대로 라우팅되고 있습니다. 올바른 방향으로 나를 가리켜 주셔서 감사합니다. –
repka
오우 아 죄송합니다 ... 나는 대답을 바꿀 것이다;) – Arcturus