문제

Avalondock (2.0)을 사용해 왔으며 IDE에서 문서를 관리하기위한 핵심입니다. 지난 달 정도에서 alt 키 장식은 Avalondock 내의 컨트롤을 더 이상 나타낼 수 없지만 alt 키 명령이 예상대로 실행되고 있음을 알아 냈습니다. alt 키 장식이 메뉴에 표시되지만 Avalondock 내부의 버튼이 아닌 아래의 이미지를 참조하십시오.

아니오 Alt 키

환경 설정이나 상태에 의해 트리거되는 것으로 보이는이 문제에 대해 특히 흥미로운이 문제는 무엇인가?

비디오 (2:07), Alt Key Adornments는 Avalondock 내에서 통제를 위해 일하고 있습니다. 그러나 이제는 그 비디오에서 사용 된 매우 많은 실행 파일을 사용하면 Alt 키 장식품이 작동하지 않습니다.

현재 빌드 2.0.1746을 사용하고 있지만 2.0.2000을 빌드하고 동일한 문제를 발견했습니다. 또한 "NoFollow noreferrer"> xceed 확장 WPF 툴킷 와 함께 포장 된 버전을 시도했으며 문제가 지속되면

또한 Item 유형의 두 가지 문서를로드하는 매우 간단한 테스트 응용 프로그램을 만들었습니다. 여기서 ItemName 속성이있는 간단한 클래스입니다.

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication1"
        xmlns:avalonDock="clr-namespace:Xceed.Wpf.AvalonDock;assembly=Xceed.Wpf.AvalonDock"
        xmlns:avalonDockLayout="clr-namespace:Xceed.Wpf.AvalonDock.Layout;assembly=Xceed.Wpf.AvalonDock"
        xmlns:avalonDockControls="clr-namespace:Xceed.Wpf.AvalonDock.Controls;assembly=Xceed.Wpf.AvalonDock"
        Title="MainWindow" Height="500" Width="500">
    <Window.Resources>
        <ResourceDictionary>
            <DataTemplate DataType="{x:Type local:Item}">
                <StackPanel Orientation="Vertical">
                    <Label Content="Item:" />
                    <TextBox Text="{Binding Name}"/>
                    <Button Content="_ClickMe" />
                </StackPanel>
            </DataTemplate>
        </ResourceDictionary>
    </Window.Resources>
    <Grid>
        <Grid.RowDefinitions>
          <RowDefinition Height="*"></RowDefinition>
          <RowDefinition Height="Auto"></RowDefinition>
        </Grid.RowDefinitions>
        <avalonDock:DockingManager Grid.Row="0"  DocumentsSource="{Binding}">
            <avalonDockLayout:LayoutRoot>
                <avalonDockLayout:LayoutPanel Orientation="Horizontal">
                    <avalonDockLayout:LayoutDocumentPane/>
                </avalonDockLayout:LayoutPanel>
            </avalonDockLayout:LayoutRoot>
        </avalonDock:DockingManager>
        <Button Grid.Row="1" Content="_Test" />
    </Grid>
</Window>
.

이 간단한 응용 프로그램에서도 alt 키 장식품은 Avalondock 외부의 Test 버튼에 대해 나타나지 만 Avalondock 내의 컨트롤에 대한 ClickMe 버튼이 아닙니다.

나는 또한 Avalondock CodePlex 사이트에서 가 있지만, 거의 응답 활동이 거의 없습니다. 나는 또한 이슈를 게시했습니다.

이 문제를 해결하거나 해결하는 방법에 대한 아이디어는 무엇입니까?

도움이 되었습니까?

해결책

다음과 같이 Avalondock의 다음 버전으로 고정 될 것처럼 들립니다.

그 동안 다음과 같은 블렌드 동작은 해결 방법입니다.

public class FixKeyboardCuesBehavior : Behavior<UIElement>
{
    private static readonly DependencyProperty ShowKeyboardCuesProperty;

    static FixKeyboardCuesBehavior()
    {
        Type keyboardNavigation = typeof(KeyboardNavigation);
        var field = keyboardNavigation.GetField("ShowKeyboardCuesProperty", BindingFlags.NonPublic | BindingFlags.Static);

        Debug.Assert(field != null, "field != null");

        ShowKeyboardCuesProperty = (DependencyProperty)field.GetValue(null);
    }

    protected override void OnAttached()
    {
        base.OnAttached();

        Window rootWindow = Window.GetWindow(this.AssociatedObject);
        if (rootWindow == null)
        {
            return;
        }

        BindingOperations.SetBinding(
            this.AssociatedObject,
            ShowKeyboardCuesProperty,
            new Binding("(KeyboardNavigation.ShowKeyboardCues)") { Source = rootWindow });
    }
}
.

Avalondock DataTemplateLayoutItemTemplate의 루트 요소에 다음을 추가하여 XamL에서 사용합니다.

<i:Interaction.Behaviors
    xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity">
    <my:FixKeyboardCuesBehavior />
</i:Interaction.Behaviors>
.

이 해결 방법은 WPF의 내부 구현 세부 정보를 사용하여 깨진 Avalondock 논리 트리 아래의 alt 동작을 다시 소개합니다.그래서 광고 자체가 수정되면 코드에서 코드에서 zap을 zap 할 수 있기를 기대할 것입니다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top