Переплет документов AvalonDock

Я использую AvalonDock ( ссылка) для создания своего приложения. У меня есть панель инструментов и область документов (как VisualStudio), и каждый новый документ содержит текстовое поле. А теперь я хотел бы добавить кнопку "Отменить" на панель инструментов, которая будет отменять изменения в текстовом поле, которое помещается в выбранный документ. Это полностью аналогично тому, как в Visual Studio.

То, что я хотел бы сделать, дан ответ здесь, но с TabControl и Tabs. MyCode:

<Window x:Class="_app.MainWindow"
    xmlns:my="clr-namespace:_app"
    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"  
    xmlns:osc="clr-namespace:OpenSourceControls;assembly=DockPanelSplitter"
    Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded"
    DataContext="{Binding RelativeSource={RelativeSource Self}}">

<Grid >
    <Grid.RowDefinitions>
        <RowDefinition Height="24"/>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
        <RowDefinition Height="24"/>
    </Grid.RowDefinitions>

    <!--...Menu And Toolbars -->

    <ToolBarPanel Grid.Row="1" Width="Auto" HorizontalAlignment="Stretch" >
             <ToolBar>
                <Button Command="Undo">Undo</Button>
            </ToolBar>
   </ToolBarPanel>

    <ad:DockingManager x:Name="dockManager" Grid.Row="2">
        <ad:ResizingPanel Orientation="Vertical">
            <ad:ResizingPanel Orientation="Horizontal">
                <ad:DockablePane ad:ResizingPanel.ResizeWidth="150">
                    <ad:DockableContent x:Name="inputContent" Title="Workspace">

                          <!-- some dockable windows -->

                     </ad:DockableContent>
                </ad:DockablePane>

                    <!-- here are added the new Documents-->
                 <ad:DocumentPane Name="mainDocPane" ItemsSource="{Binding ..Don't know..}">
                    <ad:DocumentPane.ItemContainerStyle>
                        <Style TargetType="ad:DocumentContent">
                            <Setter Property="Content" Value="{Binding Content}"/>
                        </Style>
                    </ad:DocumentPane.ItemContainerStyle>
                </ad:DocumentPane>                  
            </ad:ResizingPanel>        
        </ad:ResizingPanel>
    </ad:DockingManager>
</Grid>

Я создаю новые окна документов, как это:

    private void NewDocument_Click(object sender, RoutedEventArgs e)
    {
        string title = "Document" + (dockManager.Documents.Count+1).ToString();

        var doc = new Document() { Title = title };
        doc.Show(dockManager);
        doc.Activate();
    }

И класс документа выглядит так:

 public partial class Document : AvalonDock.DocumentContent
{
    public Document()
    {
        InitializeComponent();
    }
}

XAML:

<ad:DocumentContent x:Class="_ap.Document"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:osc="clr-namespace:OpenSourceControls;assembly=DockPanelSplitter"
    xmlns:ad="clr-namespace:AvalonDock;assembly=AvalonDock">

<DockPanel>
    <TextBox Name="input" AcceptsReturn="True" />
</DockPanel>

Поэтому я хотел бы применить тот же механизм из ссылки выше на этот код.

Спасибо за любую помощь.

1 ответ

См. ApplicaionCommands.Undo

После того, как вы свяжете свою кнопку "Отменить" с командой "на месте", которая поставляется с.NET FW, когда TextBox будет в фокусе, отмена произойдет без необходимости что-либо делать.

Другие вопросы по тегам