Edytor dla aplikacji

0

Piszę taki jakby okrojony Visual Studio. W jednej aplikacji chcę przeciągnąć jakieś buttony, panele, obrazy itp na okno. Zrobić z tego plik xml z zapisanymi informacjami na temat położenia tych kontrolek, właściwości itp i wysłać to do drugiego programu który to odczyta i wyświetli tak jak trzeba. Do tego też jakieś zaprogramowane zdarzenia po kliknięciu w button schowaj jeden panel, pokaż drugi itp.
Problem jest taki że myślałem żeby zamiast xml użyć xaml, czy da się odczytać xaml po skompilowaniu aplikacji?
Czy może jest na coś takiego lepszy sposób?
Też dobrze by było gdybym mógł w trakcie działania drugiej aplikacji wprowadzić zmiany które bez potrzeby ponownego uruchomienia aktualizowały się. Nie wiem jak się zabrać do takiej aplikacji.

1

http://msdn.microsoft.com/pl-pl/library/system.windows.markup.aspx
Interesujące mogą się okazać klasy **XamlReader **oraz **XamlWriter **:)

0

Ok, a co jeśli chodzi o podgląd aplikacji w edytorze? Też da się w tym zrobić?
Nie przyjrzałem się temu dogłębniej dopiero dziś to zrobię. W każdym razie dzięki, dużo lepsze to niż mój pomysł z xml.

0

@dam1an
No jasne. Piszesz kod Xaml w aplikacji, klikasz sobie "Wykonaj" i magicznie się pojawi okienko.
Przechwytywanie.PNG

0

Tak, już wiem. Problem w tym że ja nie chce tego kodu pisać tylko zrobić taki edytor wysiwyg. Ale myślę że jakoś sobie poradzę.

0

No to trzymam kciuki. Parsowanie XAML-a do kodu (BAML), sprawdzanie błędów, wstrzykiwanie zależności. Masakra.

No chyba że tylko edytor bez podglądu, bez sprawdzania błędów itp. to wtedy TextBox się nada. Dane z niego wystarczy skopiować do nowej instancji Window lub próbować wyświetlić w IE (silverlight jest potrzebny). A jak coś się sypnie to trudno , wina usera ?

XAML wcale nie jest prosty do obsłużenia z punktu widzenia edytora. W sieci są chyba 4 edytory do XAMLA i działają jak hmmm..... jakoś tam (http://www.infragistics.com/community/blogs/ux/archive/2012/12/11/jeffs-top-5-xaml-tools.aspx). Jedyny sensowny jest w VS i Blendzie ( też w sumie VS :) ). A jak jeszcze wchodzi do tego obsługa zdarzeń to ciesz się darmowymi Exceptionami.

0

Mam koncepcję, piszę kilkanaście linijek wszystko wywalam i piszę od nowa. I tak od trzech dni.
Założenia są takie: User z toolboxa przeciąga jakieś kontrolki na okno podglądu tak jak w VS z tym że nie wiedząc przy tym że jest coś takiego jak xaml. Może sobie te kontrolki edytować w panelu properties lub zmieniać wielkość czy położenie myszą w podglądzie. Jakieś tam proste eventy też ale w stylu schowaj jeden panel, pokaż drugi. Robi sobie powiedzmy interaktywną tablicę informacyjną i wysyła później wszystko na panel dotykowy.
Teraz myślę tak: Dwa gridy. Do GridPodgląd wrzucam kontrolki np z eventami poKliknięciuPodświetl i kliknijIPrzeciągnijAbyZmienićPołożenie do GridWyjściowy wrzucam kontrolki bez tych eventów za to muszą one mieć takie same położenie, wielkość, tło itp jak kontrolki z pierwszego grida. Na koniec tylko XamlWriter.Save(GridWyjściowy) i miałbym xamla. Tylko jak zrobić żeby edytując kontrolki w jednym gridzie w tym drugim też się edytowały? Albo może jeszcze coś tu jeszcze przeoczyłem. Nie wiem ma ktoś jakiś pomysł jak to wykonać?

1

Osobiście zrobił bym tak:

Edycja tylko na jednym oknie. Jako kontener użył bym jakiś panel, niech będzie grid.
Stworzył bym klasę do serializacji niech nazywa się DataToSerialize w której przetrzymywał bym wartości zmiennych danych kontrolek ( width, hight itd. ). Na podstawie tych danych inicjalizował bym instancje klasy Panel i w konstruktorze przekazywał dane o ilości kontrolek, rozmiarach itd. powiedzmy List<DataToSerialize>. Pewne property kontrolek nie podane w konstruktorze podczas inicjalizacji będą inicjalizowane wartościami defaultowymi przez kompilator (tak jak w XAML-u). Klasa inicjalizacyjna będzie uniwersalna dla obu programów ( edytora i wyświetlacza ). Dane odczytywał bym z List<DataToSerialize> przy każdej zmianie pozycji elementu, a więc dochodzi implementacja INotifyPropertyChanged lub ObservableCollection.

Przy edytowaniu okna, kontrolki powinny interesować się tylko i wyłącznie handlerem najechania myszką i wciśnięcia przycisku. Ale pewnie coś jeszcze wyjdzie w praniu.

Następnie wysyłanie danych z klasy do serializacji DataToSerialize wysyłał bym za pośrednictwem czegokolwiek. Jako XML, BinaryData, JSON itd. Żeby dane były spójne oba programy miały by ten sam interfejs który implementowany by był w klasie przechowującej dane ( to oczywista oczywistość ).

Pewnie da się prościej ale na dzień dzisiejszy na godzinę 13.10 widzę to tak.

0

Pomyślę nad tym.
W jaki sposób po zmianie na przykład wysokości kontrolki w podglądzie zmienić to w DataToSerialize? Bindować? Chyba nie.
Czy mogę nadpisać jakoś properties dla kontrolek takie jak width i height?

0

Po puszczeniu przycisku myszki odczytaj dane bo wtedy wiesz, że user skończył edytować panel :) Przecież gdy przycisk myszki jest włączony to można przesuwać button a po puszczeniu przycisku trzeba zapisać nową pozycję przycisku do samego przycisku.
Oczywiście możesz napisać własną kontrolkę i nadpisać jej property, tylko po co ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1