2012-05-02 4 views
1

Я хотел бы разработать приложение WPF, которое ведет себя как книга. Будет две страницы, и пользователь сможет ее отредактировать.WPF Book-like application

Я не могу использовать FlowDocumentReader, поскольку он не редактируется пользователем. Я также подумал об использовании движущегося richtextbox в зависимости от страницы с фокусом (в FlowDocument), но у нее нет поведения разрыва страницы, когда текст слишком длинный (я не хочу полосу прокрутки), как FlowDocumentReader, ,

Как я мог достичь этого?

ответ

0

XAML:

<Window x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*" /> 
     <ColumnDefinition Width="*" /> 
    </Grid.ColumnDefinitions> 
    <RichTextBox Margin="5,42,5,5" Name="richTextBox1" FontSize="{Binding ElementName=slider1, Path=Value}" /> 
    <RichTextBox Margin="5,42,5,5" Name="richTextBox2" Grid.Column="1" FontSize="{Binding ElementName=slider1, Path=Value}"/> 
    <Button Content="NextPage" Grid.Column="1" Height="23" Margin="0,12,4,0" Name="button1" VerticalAlignment="Top" HorizontalAlignment="Right" Width="90" Click="button1_Click" /> 
    <Button Content="PreviousPage" Height="23" HorizontalAlignment="Left" Margin="5,12,0,0" Name="button2" VerticalAlignment="Top" Width="94" Click="button2_Click" /> 
    <Slider Height="23" HorizontalAlignment="Left" Margin="204,12,0,0" Name="slider1" VerticalAlignment="Top" Width="100" Grid.ColumnSpan="2" Minimum="8" Maximum="25" Value="12" /> 
</Grid> 
</Window> 

Код За:

using System.Collections.Generic; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Documents; 


namespace WpfApplication1 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     List<Page> book = new List<Page>(); 
     int pageNumber = -2; 
     public MainWindow() 
     { 
      InitializeComponent(); 

      for(int i=1; i<10; i++) 
       book.Add(new Page("This is page number "+i+"\n\nContent goes in here.")); 

      // open the book on first page 
      button1_Click(null, null); 

     } 

     class Page 
     { 
      public Page(string text) 
      { 
       this.Text = text; 
      } 
      public string Text { get; set; } 
     } 


     public void setTextToPage(ref RichTextBox page, string text) 
     { 
      // Create a FlowDocument to contain content for the RichTextBox. 
      FlowDocument myFlowDoc = new FlowDocument(); 

      // Add paragraphs to the FlowDocument. 
      myFlowDoc.Blocks.Add(new Paragraph(new Run(text))); 

      page.Document = myFlowDoc; 

     } 

     private void button1_Click(object sender, RoutedEventArgs e) 
     { 
      if (book.Count < (pageNumber + 4)) 
      { 
       return; 
      } 

      pageNumber += 2; 
      setTextToPage(ref richTextBox1, book[pageNumber].Text); 
      setTextToPage(ref richTextBox2, book[pageNumber+1].Text); 

     } 

     private void button2_Click(object sender, RoutedEventArgs e) 
     { 
      if (pageNumber < 2) 
       return; 

      pageNumber -= 2; 
      setTextToPage(ref richTextBox1, book[pageNumber].Text); 
      setTextToPage(ref richTextBox2, book[pageNumber + 1].Text); 
     } 
    } 
} 
+0

Спасибо за ваш ответ, но я хотел бы, чтобы текст, который будет на другой странице, когда число строк становится выше, чем высота из richtextbox. Я не знаю, возможно ли – Peekyou