2010-06-03 2 views
2

내 응용 프로그램을 만들 때 AvalonDock (link)을 사용하고 있습니다. 나는 툴바와 문서 판 (VisualStudio를 좋아한다)을 가지고 있고 각각의 새로운 문서는 텍스트 박스를 포함하고있다. 그리고 이제는 도구 모음에 Undo 단추를 추가하여 선택한 문서에 배치 된 텍스트 상자의 변경 사항을 취소합니다. Visual Studio 에서처럼 완전히 동일합니다.AvalonDock 문서 바인딩

달성하고자하는 것은 here이지만 TabControl 및 탭이 있습니다. 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> 

위의 링크와 동일한 메커니즘을이 코드에 적용하고 싶습니다.

도움 주셔서 감사합니다.

<Window.CommandBindings> 
    <CommandBinding Command="Undo" Executed="UndoEvent" /> 
</Window.CommandBindings> 

그 후에는 xaml.cs에 새로운 이벤트 핸들러를 만들 수 있습니다 : 당신의 도구 상자에 어디

답변

-1

먼저 당신은 당신의 XAML 내에서 명령 취소 (Undo)를 바인드 할 필요가

public void UndoEvent(object sender, ExecutedRoutedEventArgs args){ 
    if (DockManager.ActiveDocument.Content is TextBox) { 
     TextBox textBox = (TextBox)DockManager.ActiveDocument.Content; 
     textBox.Undo(); 
    } 
} 

나는 그것을 테스트하지 않았기 때문에 그것이 작동하는지 잘 모르겠습니다. 어쨌든별로 다를 것이 없습니다.

1

See the ApplicaionCommands.Undo

는 .NET FW, 텍스트 상자에 포커스가있을 때 취소 당신은 아무것도 할 필요없이 일어날와 함께 제공되는 장소의 명령에 취소 버튼을 묶어되면.