środa, 30 stycznia 2008

Po przerwie ...

Minął prawie miesiąc od ostatniego mojego posta. Nie oznacza to, że nie było nic godnego odnotowania przez ten czas, wręcz odwrotnie. W najbliższym czasie poruszę parę zagadnień.

piątek, 4 stycznia 2008

DIGGING DEEPER - odtajnienie źródeł pomarańczowej alternatywy

Otóż na wszystkie pytania z trzech ostatnich moich postów, jak i na wiele więcej bardziej podstawowych czy wysublimowanych odpowiada Adam Nathan w swoich książkach Windows Presentation Foundation Unleashed i Silverlight 1.0 Unleashed. (Nagłówkiem "DIGGING DEEPER" są oznaczone niektóre uwagi w tych dziełach -:)

Autor jest pracownikiem Microsoft (senior software development engineer), ma swój wkład w rozwój .NET, uczestniczy w konferencjach developerskich. Ma bezpośrednie kontakty z zespołami tworzącymi opisane przez niego technologie, co rzutuje istotnie na sposób pisania. Jego książka o WPF jest chyba najlepiej napisaną książką informatyczną jaką kiedykolwiek przeczytałem. Wszystko wyjaśnione koncepcyjnie - z perspektywy zespołu tworzącego WPF, wiadomo dlaczego to i to zostało zrobione tak a nie inaczej, jakie czyhają na developerów pułapki itd. Jednocześnie zarysowana jest jasno kompozycja, jak i dużo szczegółów czy praktycznych przykładów. Oprócz rzeczy powszechnie wykorzystywanych w WPF, nie brakuje ciekawostek z zakresu multimediów, dokumentów z kolorowymi adnotacjami czy nawet syntezowania i rozpoznawania mowy!

Historyczna dygresja: Przy okazji tutaj przypomniało mi się, że w "Avalon" Beta 1 z maja 2005 również wymagał do odtworzenia multimediów Windows Media Player 10, a instalacja Microsoft Speech API SDK była potrzebna do obsługi mowy - czyli w gruncie rzeczy niewiele się zmieniło w tych rzadziej używanych elementach WPF. Nawiasem mówiąc to kluczowe koncepcje WPF tj. event routing, drzewo logiczne i wizualne, nawigacja przetwały jeszcze z czasów "Avalon" CTP November 2004, na bazie którego za starych dobrych czasów wygłosiłem obszerną (godzinną w wersji skróconej - sic!) prezentację "Avalon - pierwsze kroki" w marcu 2005 w KGD.NET -:)

Książka o Silverlight jest utrzymana w podobnej tonacji jak ta o WPF, więc jest również świetna, choć - jako druga w kolejności czytania - wywarła już na mnie mniejsze wrażenie. Miejscami zawiera sample z dzieła o WPF (np. niemal identyczne niektóre przykłady czy uwagi), pewne koncepcje występujące w Silverlight odziedziczone z WPF są jakby bardziej skrótowo wyjaśnione i nie zawsze po kolei. Zdaje się, że dla dogłębnego zrozumienia najlepiej najpierw przyczytać pierwszą książkę (co zresztą we wstępie drugiej książki autor sugeruje -:).

SILVERLIGHT: DIGGING DEEPER

Zgodnie z wcześniejszą zapowiedzią pora teraz na Silverlight:

1. Czy ustawienia w Silverlight są zależne od ustawień na stronie HTML?
2. Czy plik z XAML musi być umieszczony w tej samej domenie, co strona z Silverlight?
3. Co musimy wybrać w ustawieniach kontrolki Silverlight, by uzyskać przezroczyste tło?
4. Co lepiej wybrać na tło w kontrolce Silverlight: kolor Transparent czy kolor identyczny z body hostującej strony HTML? Dlaczego?
5. Przeznaczenie parametru enableHtmlAccess w kontrolce Silverlight.
6. Czy elementy UIElement są rozszerzalne w Silverlight 1.0?
7. Czy ten sam XAML może dać różne efekty w WPF i Silverlight?
8. Czy domyślna czcionka w Silverlight i WPF jest taka sama?
9. Czy w Silverlight można użyć przestrzeni nazw http://schemas.microsoft.com/winfx/2006/xaml/presentation zamiast http://schemas.microsoft.com/client/2007?
10. Różnica w zapisie propercji Name pomiędzy Silverlight 1.0 a WPF.
11. Czy w Silverlight możemy użyć property element do wyrażenia propercji o prostym typie, tak jak w WPF?
12. Czy w Silverlight 1.0 dane punktu można zapisać w XAML bez pomocy konwertera?
13. Różnica w zapisie attached property pomiędzy Silverlight 1.0 a WPF w przypadku obiektu klasy, która zawiera tę propercję. Czy zapis: Canvas Left='100' jest w Silverlight poprawny?
14. Czy zadziała w Silverlight następujący kod Java Script: e.Fill = 'Red'; e2.Fill = e.Fill; ?
15. Który z zapisów odwołania się do attached property jest poprawny w kodzie Java Script w Silverlight: e.Canvas.Left = 10 czy e["Canvas.Left"] ?
16. Czy kontrolka Silverlight 1.0 może być zainicjowana bez statycznego XAML?
17. Czy nazwy elementów tworzonych za pomocą metody CreateFromXaml muszą być inne od nazw już występujących elementów?
18. Co jest jednostką miary w Silverlight a co w WPF?
19. Czy Silverlight wspiera czcionki zainstalowane na maszynie klienta (np. Calibri w Windows Vista)?
20. Jaka jest domyślna czcionka w Silverlight?
21. Co się stanie z tekstem w TextBlock z ustawieniem FontWeight='Bold'?
22. Czy Silverlight wspiera efekt pochylenia dla czcionek bez natywnego wsparcia?
23. Czy kontrolka Silverlight może pobierać wiele plików spakowanych w jednym pliku ZIP?
24. Które z następujących formatów są wspierane przez Silverlight 1.0: JPEG, GIF, BMP, PNG?
25. Co się stanie, jeśli obrazek nie mógł zostać załadowany?
26. Czy wycentrowanie elementu można uzyskać za pomocą XAML-a w Silverlight 1.0?
27. Czy można samemu obsłużyć prawy przycisk myszy w Silverlight 1.0?
28. Które zdarzenia są wspierane przez Silverlight 1.0: rollover, drag & drop, podwójne kliknięcie, przewinięcie rolki?
29. Co się stanie, jeśli kursor przechwyconej myszy wyjdzie poza obszar kontrolki Silverlight?
30. Sposób na zaimplementowanie drag & drop oraz customowego kursora.
31. Czy zdarzenia klawiatury mogą być obsługiwane w elementach innych niż root?
32. Czy zawsze naciśnięcie każdego klawisza/kombinacji klawiszy dotrze do kontrolki Silverlight? Od czego to może zależeć?
33. Kiedy tryb full-screen może być zainicjowany i z czego to wynika?
34. Który z klawiszy jest obsługiwany w trybie full-screen: Enter, Esc, Tab?
35. Czy można "pełnoekranowy" Silverlight łączyć z HTML?
36. Czy w trybie full-screen wspierana jest transparentność?
37. Co się stanie, jeśli w trybie full-screen otworzymy okno (np. z komunikatem)?
38. Na bazie jakiego obiektu przeglądarki (mającego związek z AJAX) zbudowany został obiekt downloader?
39. Czy rozszerzenie pliku ZIP pobieranego przez Silverlight może być dowolne?
40. Czy rozszerzenie pliku ZIP z plikami czcionek pobieranego przez Silverlight 1.0 może być dowolne?
41. Jakie zdarzenie jako jedyne jest wspierane przez event trigger w Silverlight 1.0?
42. Które z wymienionych akcji są wspierane przez Silverlight 1.0: BeginStoryBoard, PauseStoryBoard, StopStoryBoard?
43. Dlaczego należy unikać animacji wielkości tekstu w Silverlight? Co należy zrobić z tekstem, aby polepszyć sytuację?
44. Jakie formaty audio i video są wspierane przez Silverlight?
45. Kluczowa różnica między sposobem realizacji obsługi audio/video w WPF a Silverlight.
46. Czy na wszystkich systemach operacyjnych możemy odtwarzać audio/video za pomocą Silverlight?
47. Czy Silverlight wspiera odtwarzanie pliku Windows Media Video ze ścieżką dźwiekową mp3?
48. Czy Silverlight odtworzy plik mp3 330 kbps?
49. Czy Silverlight odtwarza video w trybie full-screen?
50. MediaElement ma większą funkcjonalność w WPF czy w Silverlight?
51. Czy Silverlight pozwala dla odtwarzanego utworu odczytać informację o artyście i albumie?
52. Czy WPF pozwala dla odtwarzanego utworu odczytać informację o artyście i albumie?
53. Czy Silverlight wspiera DRM?
54. Trzy protokoły pobierania plików multimedialnych na maszynę klienta wspierane przez Silverlight.
55. Czy Silverlight umożliwia streaming multimediów?
56. Czy Silverlight obsługuje playlisty ASX?
57. Czy Silverlight obsługuje timeline markers?
58. Dlaczego powinno się unikać jawnego określania propercji Width i Height w MediaElement? Co można zamiast tego zrobić z plikiem multimedialnym?
59. Które narzędzie Microsoftu z linii Expression automatycznie generuje odtwarzacz multimedialny ze skórkami w XAML?

środa, 2 stycznia 2008

WPF: DIGGING DEEPER - PART TWO, LONG TOO!

Z uwagi na świąteczną przerwę, dzisiejszy post będzie jeszcze dłuuższy niż poprzedni. A więc kontynuujmy ...

36. Czy przy błędzie w bindingu zostanie wyrzucony wyjątek?
37. Jakim znakiem rozpoczyna się ścieżka do bindingu bieżącego elementu kolekcji?
38. Czy w jednym bindingu można używać jednocześnie składni XPath i Path?
39. Czy docelowa propercja w bindingu musi być dependency property?
40. Co się wykonuje wcześniej w bindingu: walidator czy konwerter?
41. Jakie korzyści daje CompositeCollection?
42. Do czego służą MultiBinding i PriorityBinding?
43. Styl bez nazwy odnosi się tylko do klas o zadeklarowanym typie, czy także do klas dziedziczących z tego typu?
44. Czy styl może odnosić się do wielu rodzajów kontrolek jednocześnie?
45. Co się stanie, jeśli styl odnosi się do propercji, która nie występuje w kontrolce związanej z tym stylem?
46. Czy data trigger może odnosić się do dependency property?
47. Czy więcej niż jedna propercja może stanowić warunek wyzwalający trigger?
48. Czy nazwanie elementu w szablonie powoduje, że jest on dostępny z poziomu kodu proceduralnego?
49. Czy może być template bez x:Key?
50. Do czego służy template binding? Jaki jest jego obszar działania?
51. Czy template binding działa z obiektem typu Color?
52. Co zrobić w przypadkach, kiedy template binding nie działa? Czym można go zastąpić?
53. Do czego służą elementy w szablonie o nazwie PART_XXX?
54. Co się stanie, jeśli w słowniku brak stylu oczekiwanego przez aplikację?
55. Czy WPF udostępnia zdarzenie zmiany themy w systemie Windows?
56. Czy plik themes\Aero.NormalColor.xaml jest brany pod uwagę tylko przy ustawionym stylu Aero w Windows Vista?
57. Zalety i wady użycia StreamGeometry.
58. Na co pozwala CombinedGeometry?
59. Czy w WPF można wskazać odpowiednik obiektu Graphics z Windows Forms?
60. Co to jest hit testing?
61. Visual hit testing a input hit testing.
62. Czym się różni Polyline od Polygon?
63. Co dokładnie oznacza kolor Transparent?
64. Za pomocą jakiego rodzaju Brush możemy w WPF bardzo łatwo uzyskać "efekt odbicia lustrzanego" ? Czy odbicie przycisku pozostanie w pełni funkcjonalną kontrolką?
65. Jeśli zastosujemy w WPF 3.0 bitmap effect, to czy obraz wyświetlany przez VisualBrush będzie poprawnie odświeżany?
66. Czy bitmap effect może być generowany sprzętowo?
67. Czy WPF wspiera w kodzie zarządzanym pisanie własnych efektów bitmapowych?
68. PerspectiveCamera a OrtographicCamera.
69. Czym się różni AxisAngleRotation3D od QuaternionRotation3D?
70. Dlaczego mamy DoubleAnimation, BooleanAnimation, itd. zamiast generycznej klasy Animation?
71. Czy w obiekcie animacji musimy określić propercje From i To?
72. Animacja trwa 10s. Ustawimy jej propercję AutoReverse na true. W jakim czasie wykona się animacja?
73. Czy EventTrigger może być aktywowany zdarzeniem, nie będącym routed event?
74. Jak korzystając z obiektu Storyboard powtórzyć sekwencję zawartych w nim animacji?
75. Chcemy stworzyć tzw. "fisheye efekt" (najechany myszką element powiększa się, najbliższej sąsiadujące elementy również ulegają powiększeniu, choć w mniejszym stopniu). Czy Storyboard może odwoływać się do innego obiektu niż ten, który zawiera event trigger (z tym Storyboard)?
76. Powiązania i różnice między klasami: SoundPlayer a SoundPlayerAction, MediaPlayer a MediaElement i MediaTimeline, SoundPlayer a MediaPlayer.
77. Zależność klas audio/video od Win32 PlaySound API i Windows Media Player API
78. Czy za pomocą SoundPlayer odtworzymy plik .mp3?
79. Jaka wersja odtwarzacza Windows Media Player w systemie Windows jest wymagana do działania MediaPlayer, MediaElement i MediaTimeline? Co się stanie, jeśli nie będzie odpowiedniej wersji odtwarzacza, a będziemy chcieli w WPF odtworzyć audio/video?
80. Ciekawostka: Jak zrobić snapshot bitmapowy dla odtwarzanego video?
81. Po co jest propercja SlipBehavior w StoryBoard?
82. Czy korzystając z MediaPlayer możemy odtwarzane pliki multimedialne zaszywać w assembly?
83. Ograniczenia dotyczące ścieżek w MediaElement, MediaTimeline, MediaPlayer w stosunku do innych elementów WPF i z czego to wynika.
84. Związek klas rozpoznawania i syntezy mowy z Microsoft Speech API.
85. Jaki głos jest dostępny standartowo w Windows Vista?
86. Czy można zsyntetyzowaną mowę zapisać do pliku?
87. Co to jest SSML?
88. Czy można zsyntetyzowaną mowę zmieszać z zawartością pliku .mp3?
89. Co musi być zainstalowane i uruchomione w systemie Windows XP, aby rozpoznawanie mowy działało? Co należy zrobić, aby uaktywnić rozpoznawanie mowy w Windows Vista?
90. Co to jest SRGS?
91. Czy trzeba pisać kod, aby wypowiadane słowa automatycznie zapisywały się do pola TextBox w WPF w systemie Windows Vista?
92. FlowDocument a FixedDocument
93. Czy dokument XPS jest statyczny czy dynamiczny?
94. Czy WPF zawiera przeglądarkę dokumentów XPS i pozwala je tworzyć?
95. Różnice między FlowDocumentScrollViewer, FlowDocumentPageViewer, FlowDocumentReader, DocumentViewer.
96. Jakie kontrolki wspierają dodawanie adnotacji do dokumentów?
97. Które z poniższych kontrolek wspiera WPF: TextBox, DataTimePicker, MonthCalendar, NumericUpDown, MaskedTextBox, NotifyIcon?
98. Czy kontrolka WPF może być hostowana w aplikacji Win32?
99. Czy kontrolka Win32 może być hostowana w aplikacji WPF?
100.Ciekawostka: Jak obraz video z kamery internetowej umieścić w swojej aplikacji?
101. Czy kontrolka Windows Forms może być hostowana w aplikacji WPF?
102. Czy kontrolka WPF może być hostowana w aplikacji Windows Forms?
103. Jakie są ograniczenia hostowanych w aplikacji WPF kontrolek wykonanych w innych technologiach w stosunku do kontrolek WPF?
104. Związek między klasą Window a HwndSource.
105. Dlaczego kontrolki Windows Forms hostowane w WPF domyślnie przyjmują wygląd "klasyczny" bez obsługi themy systemu Windows? Co należy uczynić, by wyświetlały się z themą?
106. Czy rozmiar czcionki o tej samej wartości liczbowej w WPF i Windows Forms jest taki sam? Ile wynosi stosunek czcionki w Windows Forms do czcionki w WPF?
107. Czy można hostować kontrolki ActiveX w WPF?
108. Czy można bezpośrednio hostować kontrolki ActiveX w WPF?
109. W jaki sposób można hostować kontrolkę ActiveX w aplikacji WPF standalone, XBAP, luźnym pliku XAML?
110. Ciekawostka: Jak nazywa się kontrolka ActiveX wyświetlająca zdalny pulpit w systemie Windows i jak można osadzić ją w swojej aplikacji?
111. Czy można hostować kontrolkę WPF w kontrolce ActiveX?
112. UserControl a custom control
113. Dwa sposoby wiązania elementów w szablonie kontrolki z logiką w kodzie proceduralnym.
114. Etapy w procesie pozycjonowania i określania rozmiarów elementów zawartych w panelu.
115. Dwie metody, które trzeba nadpisać, aby stworzyć panel układający elementy według customowej logiki.
116. Czy metoda Measure elementu musi być wywołana w metodzie MeasureOverride panelu?
117. Czy metoda MeasureOverride może zwracać podany jej rozmiar availableSize?
118. Jaka jest logika layout'u w panelu wstążki (ang. ribbon) w MS Office 2007?
119. Jakie narzędzie z SDK służy jako profiler WPF (m.in pokazuje najbardziej zasobożerne elementy wizualne, sposób renderowania danego elementu - software/hardware itd)?
120. Jak nazywa się sterownik w Windows Vista umożliwiający wydruk dokumentów XPS?

To tyle na razie ciekawostek z WPF, następne posty o podobnej stylistyce będą na temat Silverlight.