Pregunta

He estado usando AvalonDock (2.0) durante algún tiempo ahora, siendo clave para la gestión de documentos en un IDE.En el último mes o así, me he dado cuenta de que Alt clave adornos no están mostrando para los controles dentro de AvalonDock, a pesar de que el Alt tecla de comandos se ejecuta como se esperaba.Ver la imagen de abajo, donde el Alt la clave de los adornos se muestra en el menú, pero no para los botones dentro de AvalonDock:

No Alt Keys

Lo que es particularmente interesante acerca de este problema, que parece ser desencadenada por un entorno o condición.

Como se demuestra en este video (a las 2:07), la tecla alt adornos están trabajando para un control dentro de AvalonDock.Pero, si yo ahora uso el mismo ejecutable que usé en el video, la tecla alt adornos no funcionan.

Actualmente estoy usando la versión 2.0.1746, pero también traté de construir 2.0.2000 (con la Xceed espacio de nombres) y encontraron el mismo problema.También probé la versión empaquetada con la Xceed Extendido WPF Toolkit, y encontró que el problema persiste.

También he construido una prueba muy simple aplicación que carga un par de documentos de tipo Item, donde Item es una clase simple con un Name propiedad:

<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>

Incluso con esta aplicación sencilla, el Alt clave adornos se muestran para las Test botón fuera de AvalonDock, pero no para el ClickMe los botones de los controles dentro de AvalonDock.

También he publicado el tema aquí en el AvalonDock sitio de codeplex, pero no parece ser muy poca respuesta de la actividad.También he publicado el tema aquí sobre la prórroga del kit de herramientas de sitio de codeplex.

Cualquier idea sobre cómo corregir o solucionar este problema?

¿Fue útil?

Solución

Suena como si esto será corregido con la siguiente versión de AvalonDock.

En tanto, la siguiente Mezcla comportamiento es una solución:

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 });
    }
}

El uso de este XAML añadiendo lo siguiente en el elemento raíz de su DataTemplate para el AvalonDock LayoutItemTemplate:

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

Esta solución utiliza interna de los detalles de implementación de WPF para volver a introducir el Alt el comportamiento por debajo de la rota AvalonDock árbol lógico.Así que, voy a estar esperando para ser capaz de zap de mi código al ANUNCIO en sí es fijo!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top