2

AvalonDock (リンク) を使用してアプリケーションを作成しています。ツールバーとドキュメント ペイン (VisualStudio のようなもの) があり、新しいドキュメントにはそれぞれテキスト ボックスが含まれています。そして今、選択したドキュメントに配置されたテキストボックスの変更を元に戻す元に戻すボタンをツールバーに追加したいと思います.Visual Studioの場合とまったく同じです。

私が達成したいことはここで答えられますが、TabControl と Tabs を使用します。マイコード:

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

したがって、上記のリンクと同じメカニズムをこのコードに適用したいと思います。

助けてくれてありがとう。

4

1 に答える 1

1

ApplicaionCommands.Undo を参照してください。

元に戻すボタンを .NET FW に付属のインプレース コマンドに関連付けると、TextBox にフォーカスがあると、何もしなくても元に戻すことができます。

于 2010-09-07T19:40:43.680 に答える