Chciałbym rozszerzyć funkcjonalność FlowDocument poprzez tworzenie własnych pochodnych Span i Run.Rozszerzanie dokumentu Flow z niestandardowymi TextElements w wpf
Czy to możliwe i czy ktoś znalazł jakieś przykłady?
Chciałbym rozszerzyć funkcjonalność FlowDocument poprzez tworzenie własnych pochodnych Span i Run.Rozszerzanie dokumentu Flow z niestandardowymi TextElements w wpf
Czy to możliwe i czy ktoś znalazł jakieś przykłady?
Firma Microsoft nie ujawniła metod wymaganych do renderowania niestandardowej TextElement w jednej z ich klas dokumentów. Jeśli spojrzysz na kod dla Run lub Span, nie ma rzeczywistego kodu renderującego. Renderowanie odbywa się w UIElement zbudowanym przez różne klasy wewnętrzne (takie jak FixedTextBuilder).
Z notatek MSDN w sprawie FrameworkContentElement:
FrameworkContentElement nie ma jeszcze zdefiniować własne zachowanie renderowania; Tworzenie instancji klasy FrameworkContentElement w kodzie lub znacznikach jest możliwe, ale nic nie wyświetla w interfejsie użytkownika aplikacji (interfejsie) aplikacji WPF. Logika renderowania musi być zapewniona przez klasy, które pobierają elementy podrzędne FrameworkContentElement w ramach ich modelu zawartości lub w klasach pochodnych FrameworkContentElement.
Nie wszystko jest stracone, wsparcie dla renderowania niestandardowego bloku i elementy Inline jest poprzez zajęcia BlockUIContainer i InlineUIContainer. Następnie można utworzyć UIElement o niskim poziomie, który będzie hostowany wewnątrz dokumentu stałego lub przepływu, lub użyć elementów WPF wyższego poziomu.
Jakiego rodzaju rozciągliwość jest wymagana? Zwykle, jeśli chodzi o zmianę domyślnego zachowania dowolnej kontrolki WPF, której nie można zmienić przez dziedziczenie, używamy Attached Properties.
Here is an example z elementu Span
, który jest powiązany z kolekcją przedmiotów. Ta sama sztuczka z dołączonymi właściwościami pomaga w wiązaniu się z tekstem.
Odpowiedź będzie również zależała od kontekstu użytkowania FlowDocument
. Jeśli jest w trybie tylko do odczytu, klasy BlockUIContainer i InlineUIContainer są Twoimi przyjaciółmi. Ale jeśli FlowDocument
jest wewnątrz RichTextBox
, będziesz ich nienawidzić i przeklinać (problemy z kopiowaniem/wklejaniem, cofaniem/powtarzaniem itp.) Wraz z całą infrastrukturą obsługi tekstu WPF.
Próbuję zastosować wzorzec MVVM dla dokumentu przepływu. Mogłem wykonać TextBox z DataBinding ale mam problemy z BlockUIContainer ... – DrMarbuse