سؤال

لقد تم استخدام أفالوندوك (2.0) لبعض الوقت الآن ، كونها مفتاح لإدارة الوثائق في إيد.في الشهر الماضي أو نحو ذلك ، لاحظت ذلك البديل الزينة الرئيسية لم تعد تظهر لعناصر التحكم داخل أفالوندوك ، على الرغم من أن البديل يتم تنفيذ الأوامر الرئيسية كما هو متوقع.انظر الصورة أدناه حيث البديل تظهر الزينة الرئيسية في القائمة, ولكن ليس للأزرار داخل أفالوندوك:

No Alt Keys

ما هو مثير للاهتمام بشكل خاص حول هذه المسألة ، أنه يبدو أنه ناتج عن بيئة أو حالة بيئية.

كما هو موضح في هذا فيديو (في 2: 07), والزينة مفتاح بديل تعمل من أجل السيطرة داخل أفالوندوك.ولكن ، إذا كنت الآن استخدام نفس الملف التنفيذي الذي استخدمته في هذا الفيديو ، والزينة مفتاح ألت لا تعمل.

أنا حاليا باستخدام بناء 2.0.1746 ، ولكن حاولت أيضا بناء 2.0.2000 (مع مساحة الاسم زيد) وجدت نفس المشكلة.لقد جربت أيضا الإصدار المعبأ مع مجموعة أدوات وف الموسعة, ، ووجدت أن المشكلة لا تزال قائمة.

أنا أيضا بنيت تطبيق اختبار بسيط جدا الذي يحمل بضع وثائق من نوع Item, ، أين Item هي فئة بسيطة مع Name الممتلكات:

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

حتى مع هذا التطبيق البسيط ، فإن البديل الزينة الرئيسية تظهر على Test زر خارج أفالوندوك ، ولكن ليس لل ClickMe أزرار لعناصر التحكم داخل أفالوندوك.

لقد نشرت أيضا المشكلة هنا على موقع أفالوندوك كوديبلكس ، ولكن يبدو أن هناك القليل جدا من نشاط الاستجابة.لقد نشرت أيضا المشكلة هنا على موقع مجموعة الأدوات الموسعة كوديبلكس.

أي أفكار حول كيفية تصحيح أو حل هذه المشكلة?

هل كانت مفيدة؟

المحلول

يبدو كما لو أن هذا سيتم إصلاحه مع الإصدار التالي من أفالوندوك.

في غضون ذلك ، يعد سلوك المزج التالي حلا بديلا:

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

استخدم هذا من زمل عن طريق إضافة ما يلي إلى عنصر الجذر الخاص بك DataTemplate من أجل أفالوندوك LayoutItemTemplate:

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

يستخدم هذا الحل تفاصيل التنفيذ الداخلية ل وف لإعادة تقديم البديل السلوك أسفل شجرة أفالوندوك المنطقية المكسورة.لذلك ، سوف نتطلع إلى أن تكون قادرة على انطلق من التعليمات البرمجية الخاصة بي عندما يتم إصلاح الإعلان نفسه!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top