Kilka praktycznych porad dal osób dopiero zaczynających przygodę z WPF.
1. Kontrolka RichTextBox
a) pobieranie zawartości kontrolki
Jeśli ktoś korzystał wcześniej z WindowsForms i pobranie zawartości tekstu znajdującego się wewnątrz kontrolki RichTextBox nie sprawiało mu problemów (właściwość Text) to w przypadku WPF może nie być już to takie jasne.
WPF wykorzystuje nowy model "zawartości" i aby pobrać text z naszej kontrolki możemy skorzystać z poniższego kodu:
TextRange textRange = new TextRange(rtb.Document.ContentStart, rtb.Document.ContentEnd);
string s = textRange.Text;
b) programowe dodawanie tekstu
Także dodawanie tekstu "z kodu" nie jest takie oczywiste jak w WindowsForms:
FlowDocument flowDocument = new FlowDocument();
Paragraph para = new Paragraph();
para.Inlines.Add("Text to add");
flowDocument.Blocks.Add(para);
rtb.Document = flowDocument;
Jak więc widać, aby dodać tekst należy najpierw stworzyć obiekt klasy FlowDocument oraz Paragraph. Następnie do kolekcji Inlines Paragraphu dodajemy tekst który chcemy ujrzeć w kontrolce. Na końcu do kolekcji Blocks FlowDocumentu dodajemy nasz paragraf i ostatecznie przypisujemy właściwości Document RichTextBoxa obiekt FlowDocument.
c) wczytywanie danych z pliku
Jak się domyślacie także i ta sprawa nie jest od początku taka oczywista :). W WinForms kontrolka posiadała wygodną metodę LoadFile() która pozwalała określić np. ścieżkę z której można załadować plik. W WPF należy skorzystać bezpośrednio ze strumienia:
System.Windows.Forms.OpenFileDialog ofd = new System.Windows.Forms.OpenFileDialog();
ofd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
ofd.Filter = "Plik textowy (*.txt)|*.txt";
ofd.RestoreDirectory = true;
if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
string fileName = ofd.FileName;
TextRange textRange = new TextRange(rtbToChange.Document.ContentStart, rtbToChange.Document.ContentEnd);
System.IO.FileStream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Open);
textRange.Load(fs, System.Windows.DataFormats.Text);
fs.Close();
}
Skorzystałem tutaj z wygodnego (jak mi się wydaje) OpenFileDialoga znajdującego się w Windows.Forms (można także tutaj skorzystać z OpenFileDialog znajdującego się w System.Win32). Następnie postępujemy jak przy obsłudze większości plików:
1. Otwieramy plik
2. Tworzymy obiekt TextRange któremu przekazujemy granice dokumentu
3. Korzystamy z metody Load(IO.Stream, dataFormat) która wczytuje tekst do RichTextBoxa ze strumienia
4. Po zakończeniu pracy z plikiem zamykamy go.
2. Button
Problem także nie ominął mnie także w kwestii zwykłego przycisku. Znana właściwość z WinForms FlatStyle: Flat, nie występuje w WPFowskiej kontrolce Button. Aby nadać płaski styl przyciskowi można użyć poniżeszego kodu:
Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}
Powyższą linijkę wstawiamy bezpośrednio do kodu XAML podczas deklaracji Buttona.
Podsumowując:
WPF przez swoją innowacyjność wymaga poznania nowych mechanizmów, które niekiedy ułatwiają a niekiedy utrudniają pracę programiście :)
Brak komentarzy:
Prześlij komentarz