Avalondock, после применения макета с помощью XmlLayoutSerializer. Невозможно показать или скрыть LayoutAnchorable - PullRequest
0 голосов
/ 15 апреля 2020

Используется элемент управления Avalondock, предоставляемый Exceed через NuGet в приложении WPF. Я подключил операции show и hide к кнопке, чтобы переключить видимость LayoutAnchorable. После загрузки приложения сначала все работает как положено. После применения макета невозможно выполнить операцию переключения для изменения видимости.

Наблюдения

  1. макет с применением логики c помещается в конструктор класса управления сразу после InitializeComponent. Затем не удалось выполнить операцию переключения. Это даже не приводит к исключению. Я клонировал исходный код Avalondock, добавил его в свой проект, немного отладил и обнаружил, что сразу после применения события layout в классе LayoutAnchrable становится пустым. В дополнение к этому, свойство Manager поверх Parent свойство в текущем классе также становится нулевым. Понятия не имею, почему он ведет себя так, что там тоже нет подозрительного кода.

    public MainWindow() { InitializeComponent(); using (_xmlReader = XmlReader.Create("layout.xml")) { var layoutSerializer = new XmlLayoutSerializer(dock); layoutSerializer.Deserialize(_xmlReader); } }

  2. Теперь макет с применением логики c помещен в кнопку применить макет ко всему элементу управления Avalondock сразу после нажатия кнопки. тогда исключение

Ссылка на объект не установлена ​​на экземпляр объекта

наблюдается сразу после выполнения операции переключения.

private void OnApplyLayout(object sender, RoutedEventArgs e)
    {
        var layoutSerializer = new XmlLayoutSerializer(dock);

        layoutSerializer.Deserialize("layout.xml");
        dock.UpdateLayout();
    }
private void Button_Click(object sender, RoutedEventArgs e)
    {
        if (group1.IsHidden)
        {
            group1.Show();
        }
        else
        {
            group1.Hide();
        }
    }

XAML код

<avalonDock:DockingManager x:Name="dock" Grid.Row="1">
        <avalonDock:LayoutRoot x:Name="layoutRoot">
            <avalonDock:LayoutPanel>
                <avalonDock:LayoutAnchorablePane>
                    <avalonDock:LayoutAnchorable Title="OneAnchorable">
                        <Button Content="Click" />
                    </avalonDock:LayoutAnchorable>
                </avalonDock:LayoutAnchorablePane>
                <avalonDock:LayoutDocumentPane>
                    <avalonDock:LayoutDocument x:Name="docg1" ContentId="Doc1">
                        <Button Content="Document Pane" />
                    </avalonDock:LayoutDocument>
                </avalonDock:LayoutDocumentPane>
                <avalonDock:LayoutDocumentPaneGroup>
                    <avalonDock:LayoutDocumentPane x:Name="docPane">
                        <avalonDock:LayoutDocument x:Name="docGroup1" ContentId="document1" Title="Document 1" >
                            <Button Content="Document 1 Content" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                        </avalonDock:LayoutDocument>
                        <avalonDock:LayoutDocument x:Name="docGroup2" ContentId="document2" Title="Document 2" >
                            <TextBox Text="Document 2 Content" AcceptsReturn="True"/>
                        </avalonDock:LayoutDocument>
                    </avalonDock:LayoutDocumentPane>
                </avalonDock:LayoutDocumentPaneGroup>
                <avalonDock:LayoutAnchorablePaneGroup x:Name="aPaneGroup" DockWidth="125">
                    <avalonDock:LayoutAnchorablePane>
                        <avalonDock:LayoutAnchorable x:Name="group1" ContentId="alarms" Title="Alarms" >
                            <ListBox x:Name="ls">
                                <s:String>Alarm 1</s:String>
                                <s:String>Alarm 2</s:String>
                                <s:String>Alarm 3</s:String>
                            </ListBox>
                        </avalonDock:LayoutAnchorable>
                        <avalonDock:LayoutAnchorable x:Name="group2" ContentId="journal" Title="Journal" >
                            <RichTextBox>
                                <FlowDocument>
                                    <Paragraph FontSize="14" FontFamily="Segoe">
                                        This is the content of the Journal Pane.
                                        <LineBreak/>
                                        A
                                        <Bold>RichTextBox</Bold> has been added here
                                    </Paragraph>
                                </FlowDocument>
                            </RichTextBox>
                        </avalonDock:LayoutAnchorable>
                    </avalonDock:LayoutAnchorablePane>
                </avalonDock:LayoutAnchorablePaneGroup>
            </avalonDock:LayoutPanel>
        </avalonDock:LayoutRoot>

    </avalonDock:DockingManager>
...