<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1363207308265120314</id><updated>2012-01-09T23:50:40.171Z</updated><category term='Visual Basic'/><category term='VS2010'/><category term='Orcas'/><category term='PDC08'/><category term='LINQ'/><category term='off topic'/><category term='Konferenzen'/><category term='WPF'/><category term='VisualStudio'/><category term='Silverlight'/><category term='Reactive Framework'/><title type='text'>Benjamin Gopp (HiQ-Software)</title><subtitle type='html'>Mein Blog von und für .NET Developer</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://hiq-software.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://hiq-software.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>HiQ-Software</name><uri>http://www.blogger.com/profile/17952163358850374510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>36</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1363207308265120314.post-1293962037004761675</id><published>2011-05-16T07:52:00.000+01:00</published><updated>2011-05-16T07:53:40.362+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Konferenzen'/><title type='text'>Spekulativ: VisualStudio 2012, TFS in da Cloud, und .NET 4.5</title><content type='html'>&lt;p&gt;Heute findet die &lt;a href="http://northamerica.msteched.com"&gt;teched North America&lt;/a&gt; in Atlanta statt. Die großen Zeiten einer teched sind längst vorbei, als noch Bill Gates die Keynote hielt, oder Dr. Brown mit seinem &lt;a href="http://www.youtube.com/watch?v=KxMrBuluEJ8"&gt;DeLorean&lt;/a&gt;, “zurück aus der Zukunft” kam. Stattdessen erwartet man heutzutage von Konferenzen wie der MIX oder PDC die großen Ankündigungen.&lt;/p&gt;  &lt;p&gt;Schaut man sich jedoch die diesjährige Sessionliste an, kann man von der heutigen Keynote ein paar wichtige Ankündigungen erwarten. Einige Informationen sind schon durchgesickert, wie bereits &lt;a href="http://www.heise.de/developer/artikel/Microsoft-NET-Framework-4-5-1229095.html"&gt;“der Dotnet-Doktor”&lt;/a&gt; schrieb.&lt;/p&gt;  &lt;p&gt;Wenn Jason Zander die Keynote hält, geht es meistens um VisualStudio und das .NET Framework; er ist nämlich der Hauptverantwortliche dafür. Sicherlich wird er einige Demos von VisualStudio 2012 und .NET 4.5 vorführen. Ich denke aber nicht, dass es bereits jetzt eine Beta geben wird.&lt;/p&gt;  &lt;p&gt;Nach der Keynote folgen die Foundation Sessions, d.h. Vertiefungen von den Demos die in der Keynote gezeigt wurden. Diese sind meine Highlights: &lt;/p&gt;  &lt;ul&gt;   &lt;p&gt;&lt;a href="http://northamerica.msteched.com/signin"&gt;&lt;/a&gt;&lt;/p&gt;    &lt;li&gt;     &lt;p&gt;&lt;a href="http://northamerica.msteched.com/topic/details/FDN03#showdetails"&gt;FDN03 | The Future of Microsoft Visual Studio Application Lifecycle Management&lt;/a&gt;&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;&lt;a href="http://northamerica.msteched.com/topic/details/FDN02#showdetails"&gt;FDN02 | Collaboration in the Cloud with SharePoint: A New World of Productivity&lt;/a&gt;&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;&lt;a href="http://northamerica.msteched.com/topic/details/FDN04#showdetails"&gt;FDN04 | Microsoft SQL Server: The Data and BI Platform for Today and Tomorrow&lt;/a&gt;&lt;/p&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Wie es mit TFS/VisualStudio als ALM Plattform weitergehen soll, hat Brian Harry auf der PDC10 gezeigt: Es geht in die Cloud!&lt;/p&gt;  &lt;p&gt;Ein weiteres wichtiges Thema wird die “Async&amp;quot; Spracherweiterung für VB und C#sein. Damit wird Asynchrone Programmierung quasi zum Kinderspiel. &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://northamerica.msteched.com/topic/details/DEV324#showdetails"&gt;DEV324 | C# and Visual Basic Future: Async Made Simple &lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Unterstützung wird es vom Framework über neue APIs in der TPL sowie in WCF geben. &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://northamerica.msteched.com/topic/details/DEV301#showdetails"&gt;DEV301 | The Future of Parallel Programming in the Microsoft .NET Framework&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://northamerica.msteched.com/topic/details/DEV340#showdetails"&gt;DEV340 | Tackle the Complexity of Async Calls in Microsoft Silverlight and WPF Clients&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://northamerica.msteched.com/topic/details/MID310#showdetails"&gt;MID310 | Windows Communication Foundation Futures&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Evtl. gibt es auch hier die CTP3&lt;/p&gt;  &lt;p&gt;Mal gucken ob ich mit meinem Blick in die Glaskugel recht behalte :-)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1363207308265120314-1293962037004761675?l=hiq-software.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiq-software.blogspot.com/feeds/1293962037004761675/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1363207308265120314&amp;postID=1293962037004761675' title='1 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/1293962037004761675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/1293962037004761675'/><link rel='alternate' type='text/html' href='http://hiq-software.blogspot.com/2011/05/spekulativ-visualstudio-2012-tfs-in-da.html' title='Spekulativ: VisualStudio 2012, TFS in da Cloud, und .NET 4.5'/><author><name>HiQ-Software</name><uri>http://www.blogger.com/profile/17952163358850374510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1363207308265120314.post-4921336497336057117</id><published>2010-10-22T08:18:00.001+01:00</published><updated>2010-10-22T08:18:02.909+01:00</updated><title type='text'>PDC10 Sessions online</title><content type='html'>&lt;p&gt;Die Sessions für die PDC vom 28. / 29. Oktober sind online.&lt;/p&gt;  &lt;p&gt;Anhand der Session Beschreibungen lässt sich erahnen, welche Überraschungen uns erwarten werden. &lt;/p&gt;  &lt;p&gt;Direkt nach der Keynote, die in den UserGroups zusammen gesehen wird, berichtet Anders Heijlsberg über die Zukunft von C# und VB. Vermutlich wird es aber kein C# 5 oder VB 11 geben. Ich könnte mir aber vorstellen, dass es eine CTP vom “Compiler as a Service” geben könnte.&lt;/p&gt;  &lt;p&gt;In dem gleichen Slot behandelt Bart de Smet ein nicht weniger wichtiges Thema, nämlich LINQ und Rx.&lt;/p&gt;  &lt;p&gt;Auffällig ist, dass einige Slots noch nicht besetzt sind. Es sind also einige neu Ankündigungen zu erwarten, im Bereich Azure, Windows Phone 7 und sogar VisualStudio. Unteranderem gibt es auch einen Placeholder für Silverlight! Vielleicht erhalten wir einen Blick von Silverlight 5?!&lt;/p&gt;  &lt;p&gt;In der letzten Session geht es um die Zukunft von F#.&lt;/p&gt;  &lt;p&gt;Alle Sessions werden live gestreamt! Es lohnt sich also statt dem Abendspielfilm, oder dem Besuch im Kino, eine Session von der PDC anzusehen!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1363207308265120314-4921336497336057117?l=hiq-software.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiq-software.blogspot.com/feeds/4921336497336057117/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1363207308265120314&amp;postID=4921336497336057117' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/4921336497336057117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/4921336497336057117'/><link rel='alternate' type='text/html' href='http://hiq-software.blogspot.com/2010/10/pdc10-sessions-online.html' title='PDC10 Sessions online'/><author><name>HiQ-Software</name><uri>http://www.blogger.com/profile/17952163358850374510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1363207308265120314.post-6035751056121388213</id><published>2010-10-06T09:09:00.001+01:00</published><updated>2010-10-06T09:09:15.231+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='VisualStudio'/><title type='text'>The Silverlight Developer Runtime is not installed</title><content type='html'>&lt;p&gt;Silverlight ist schon eine tolle Plattform…&lt;/p&gt;  &lt;p&gt;Heute morgen bin ich auf &lt;a href="http://channel9.msdn.com"&gt;channel9&lt;/a&gt; gesurft und wollte mir ein Video anschauen. Nach klick auf den Play Button, kam ein netter Bildschirm, der mich darauf hinwies, dass ich nicht die aktuellste Silverlight Version installiert hätte. Da ich das Video unbedingt gucken wollte, und auch sonst keine Probleme damit habe immer die neuste Version zu installieren, lud ich die neueste SL Version herunter und installierte sie.&lt;/p&gt;  &lt;p&gt;Gleichzeitig war ich aber auch mit VisualStudio zugange. Während ich also das Video auf channel9 sah, arbeite ich fleißig an einem Silverlight-Spike. Als ich nun F5 drückte, kam folgende Meldung:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_c4ehIbstBAc/TKwuqFbu8LI/AAAAAAAAAEg/zt0vlFjv6HQ/s1600-h/untitled%5B4%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="untitled" border="0" alt="untitled" src="http://lh5.ggpht.com/_c4ehIbstBAc/TKwuqqKSjNI/AAAAAAAAAEk/_LeKg8pbU08/untitled_thumb%5B2%5D.png?imgmax=800" width="425" height="225" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Zunächst dachte ich, dass es daran liegen könnte, dass nach der Installation der Silverlight Runtime nun die Silverlight Tools für VisualStudio ebenfalls aktualisiert werden müssten. Die Installation der SL Tools brachte aber keine Lösung.&lt;/p&gt;  &lt;p&gt;Nach etwas “bingen” stieß ich auf einige Foreneinträge. Dieses Problem scheint wohl häufiger aufzutauchen,was ich erstaunlich fand. (Jedoch nicht ungewöhnlich für Silverlight) &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Für Silverlight gibt es zwei Runtimes!&lt;/strong&gt; Eine für “Normalos” und eine für Entwickler. Die developer runtime ist jedoch nicht im SDK oder den Tools enthalten, sondern es muss das sog. &lt;a title="http://go.microsoft.com/fwlink/?LinkID=188039" href="http://go.microsoft.com/fwlink/?LinkID=188039"&gt;Silverlight managed debugging package&lt;/a&gt;&amp;#160; heruntergeladen werden.&lt;/p&gt;  &lt;p&gt;Überlegt euch also gut, ob ihr immer die neuste Silverlight Version braucht, sie könnte euer VisualStudio kaputt machen.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1363207308265120314-6035751056121388213?l=hiq-software.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiq-software.blogspot.com/feeds/6035751056121388213/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1363207308265120314&amp;postID=6035751056121388213' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/6035751056121388213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/6035751056121388213'/><link rel='alternate' type='text/html' href='http://hiq-software.blogspot.com/2010/10/silverlight-developer-runtime-is-not.html' title='The Silverlight Developer Runtime is not installed'/><author><name>HiQ-Software</name><uri>http://www.blogger.com/profile/17952163358850374510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_c4ehIbstBAc/TKwuqqKSjNI/AAAAAAAAAEk/_LeKg8pbU08/s72-c/untitled_thumb%5B2%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1363207308265120314.post-4130959710027997335</id><published>2010-04-16T10:53:00.001+01:00</published><updated>2010-04-16T10:53:34.246+01:00</updated><title type='text'>VB – Quo Vadis?</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Ja ich gebe zu, ich mag VB.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Ich finde VB10 hat ein paar sehr nützliche Features. So sind z.B. in den meisten Fällen keine underscores (_) als sog. Line continuations mehr nötig.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Auch nett sind die collection initializer, die es momentan in C# in der Form nicht gibt.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Bisher mochte ich VB immer verteidigen, wenn es darum ging, ob VB schlechter ist als C#.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Doch mittlerweile kommen mir Zweifel. Das mag daran liegen, dass ich C# doch recht lieb gewonnen habe. Vielleicht aber auch daran, dass ich immer mehr F# Code schreibe und dessen Eleganz einfach umwerfend finde.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Der Grund warum mir Zweifel an VB kommen, folgender VB10 Code, den ich in einem Blog entdeckt habe. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;Public Sub LoadPolicyDetail()&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    Dim client As New Services.Service1Client()&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    AddHandler client.GetPolicyDetailCompleted,&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;        Sub(s As Object, e As GetPolicyDetailCompletedEventArgs)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;            If e.Result &amp;lt;&amp;gt; Nothing Then&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;                MessageBox.Show("Awesome!")&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;            End If&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;        End Sub&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    client.GetPolicyDetailAsync()&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;End Sub&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;Dieser Code zeigt, wie man eine anonyme Methode an einen Event bindet.  Hier der gleiche Code in C#&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;void&lt;/span&gt; LoadPolicyDetail()&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    {&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;var&lt;/span&gt; client = &lt;span style='color:blue'&gt;new&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:#2b91af'&gt;Service1Client&lt;/span&gt;();&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;      client.GetPolicyDetailCompleted += (s,e) =&amp;gt; &lt;span style='color:blue'&gt;if&lt;/span&gt; (&lt;span style='color:black'&gt;e&lt;/span&gt;.Result != &lt;span style='color:blue'&gt;null&lt;/span&gt;) &lt;span style='color:black'&gt;MessageBox&lt;/span&gt;.Show(&lt;span style='color:#a31515'&gt;"Awesome!"&lt;/span&gt;);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New'&gt;&lt;span style='font-size:10pt'&gt;&lt;br /&gt;					&lt;/span&gt;&lt;span style='font-size:10pt'&gt;client.GetPolicyDetailAsync()&lt;/span&gt;&lt;span style='font-size:10pt'&gt;&lt;br /&gt;					&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    }&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;Dieser Code ist doch deutlich lesbarer. Statt 8 Zeilen Code und einer Menge "Rauschen" brauche ich mit C# nur 3 Zeilen. Gut man könnte den Code noch etwas formatieren, dann kommt man auf 5.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Ich verstehe nicht, welche Vorteile eine Programmiersprache bringen soll, für die man bei gleichem Ergebnis 3x so viel Code schreiben muss.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1363207308265120314-4130959710027997335?l=hiq-software.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiq-software.blogspot.com/feeds/4130959710027997335/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1363207308265120314&amp;postID=4130959710027997335' title='4 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/4130959710027997335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/4130959710027997335'/><link rel='alternate' type='text/html' href='http://hiq-software.blogspot.com/2010/04/vb-quo-vadis.html' title='VB – Quo Vadis?'/><author><name>HiQ-Software</name><uri>http://www.blogger.com/profile/17952163358850374510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1363207308265120314.post-3518657633522041599</id><published>2010-03-03T12:35:00.001Z</published><updated>2010-03-03T12:35:01.165Z</updated><title type='text'>F# und der Umgang mit out Parametern</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Jede Funktion bzw. Methode kann zunächstmal nur immer eine Informationen zurückgegeben. Dies wird durch den Rückgabewert oder Rückgabeparameter ausgedrückt. Was macht man aber, wenn man in einer Methode mehrere Informationen zurückgeben möchte, die evtl. sogar optional sein sollen? Eine Möglichkeit ist natürlich einen komplexen Datentyp zu definieren und diesen als Rückgabetyp der Methode zu benennen. Aus Bequemlichkeit macht man das aber eher nicht.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Ein pragmatischster Ansatz ist es, für die zusätzlichen Rückgabewerte jeweils &lt;em&gt;out&lt;/em&gt; Parameter zu definieren. Die &lt;em&gt;out&lt;/em&gt; Parameter sind in der Regel primitive Datentypen wie &lt;em&gt;string&lt;/em&gt; oder &lt;em&gt;int&lt;/em&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Im .NET Framework gibt es einige Methoden die einen &lt;em&gt;out&lt;/em&gt; Parameter haben. Eine oft verwendete Klasse ist z.B. das &lt;em&gt;Dictionary&lt;/em&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Hier ein Beispiel:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;var&lt;/span&gt; dict = &lt;span style='color:blue'&gt;new&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:#2b91af'&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style='color:blue'&gt;string&lt;/span&gt;, &lt;span style='color:blue'&gt;int&lt;/span&gt;&amp;gt;();&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;dict.Add(&lt;span style='color:#a31515'&gt;"A"&lt;/span&gt;, 1);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;dict.Add(&lt;span style='color:#a31515'&gt;"B"&lt;/span&gt;, 2);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;Jetzt versuchen wir Werte aus dem Dictionary zu ziehen. Da nicht garantiert werden kann, dass der gesuchte Wert auch in dem Dictionary ist, verwenden wir die Methode &lt;em&gt;TryGetValue&lt;/em&gt;. Da diese nun einen &lt;em&gt;out&lt;/em&gt; Parameter definiert, müssen wir bevor wir diese Methode aufrufen können eine Variable mit dem entsprechenden &lt;em&gt;out&lt;/em&gt; Parameter Typ definieren und die Methode mit der Variablen aufrufen.Der Rückgabewert von &lt;em&gt;TryGetValue&lt;/em&gt; ist ein &lt;em&gt;bool&lt;/em&gt;, so dass man erkennen kann, ob der Wert im Dictionary vorhanden ist. Nur wenn der Wert vorhanden ist, hat auch die Variable einen Wert. Aber Vorsicht! Da &lt;em&gt;int&lt;/em&gt; ein Werttyp, ist hat er immer einen Defaultwert, nämlich 0. Zur Sicherheit sollte man daher der &lt;em&gt;out&lt;/em&gt; Variablen einen anderen Wert als den Defaultwert zuweisen, bei &lt;em&gt;int&lt;/em&gt; z.B: -1 statt o.&lt;span style='font-family:Courier New; font-size:13pt'&gt;&lt;br /&gt;				&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;int&lt;/span&gt; value = -1;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;var&lt;/span&gt; success = dict.TryGetValue(&lt;span style='color:#a31515'&gt;"A"&lt;/span&gt;, value);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;if&lt;/span&gt; (success)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;					&lt;span style='color:#2b91af'&gt;Console&lt;/span&gt;.WriteLine(value);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;}&lt;/span&gt;&lt;span style='font-size:8pt'&gt;&lt;br /&gt;				&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Soweit dürfte das jedem klar sein und sicherlich schon oft gemacht worden. Für mich ist die o.g. Methode, genauso wie &lt;em&gt;TryParse&lt;/em&gt;, ein legitimer Grund &lt;em&gt;out&lt;/em&gt; Paramter zu verwenden. Alle anderen Gründe sind eher zweitrangig da hier Bequemlichkeit im Vordergrund steht. Man will halt keinen komplexen Datentypen nur für einen Rückgabeparameter erstellen.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Aber es geht auch anders: mit F#!&lt;br /&gt;&lt;/p&gt;&lt;h1&gt;F# to the rescue&lt;br /&gt;&lt;/h1&gt;&lt;p&gt;Da F# eine ganz normale .NET Sprache ist, kann man natürlich auch die Klassen des Frameworks aufrufen. Z.B. auch die Methoden die &lt;em&gt;out&lt;/em&gt; Parameter definieren, wie z.B. das Dictionary. Wie geht F# damit um?&lt;br /&gt;&lt;/p&gt;&lt;p&gt;In F# können wir ganz normal ein Dictionary erzeugen.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Consolas; font-size:10pt'&gt;&lt;span style='color:blue'&gt;open&lt;/span&gt; System.Collections.Generic&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Consolas; font-size:10pt'&gt;&lt;span style='color:blue'&gt;let&lt;/span&gt; dict = new Dictionary&amp;lt;string,int&amp;gt;()&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Nun fügen wir Werte zum Dictionary hinzu&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Consolas; font-size:10pt'&gt;dict.Add(&lt;span style='color:maroon'&gt;"A"&lt;/span&gt;,1)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Consolas'&gt;&lt;span style='font-size:10pt'&gt;dict.Add(&lt;span style='color:maroon'&gt;"B"&lt;/span&gt;,2)&lt;/span&gt;&lt;span style='font-size:8pt'&gt;&lt;br /&gt;					&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Schließlich wollen wir die Werte auch wieder auslesen.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Consolas; font-size:10pt'&gt;&lt;span style='color:blue'&gt;let&lt;/span&gt; result = dict.TryGetValue(&lt;span style='color:maroon'&gt;"A"&lt;/span&gt;)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Nun von welchem Typ ist jetzt result? Und warum muss man keinen &lt;em&gt;out&lt;/em&gt; Parameter übergeben?&lt;br /&gt;&lt;/p&gt;&lt;p&gt;F# Interactive gibt die Anwort.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;val result : bool * int = (true, 1)&lt;/span&gt;&lt;span style='font-size:14pt'&gt;&lt;br /&gt;				&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Result ist vom Typ &lt;span style='font-family:Courier New; font-size:10pt'&gt;bool * int&lt;/span&gt;&lt;span style='font-size:14pt'&gt;&lt;br /&gt;				&lt;/span&gt;, was in F# bedeutet dass dies ein Tupel ist. In .NET 4.0 kann man dies als &lt;span style='font-size:10pt'&gt;&lt;span style='font-family:Consolas'&gt;Tuple&amp;lt;bool,int&amp;gt;&lt;/span&gt;&lt;br /&gt;				&lt;/span&gt;beschreiben.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Nun können wir diesen Tupel mit den Funktionen &lt;em&gt;fst&lt;/em&gt; und &lt;em&gt;snd&lt;/em&gt; zerlegen.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Consolas; font-size:10pt'&gt;&lt;span style='color:blue'&gt;let&lt;/span&gt; success = fst result&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;val success : bool = true&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Consolas; font-size:10pt'&gt;&lt;span style='color:blue'&gt;let&lt;/span&gt; value = snd result&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;val value : int = 1&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;F# wäre nicht F# wenn man es nicht noch einfacher ausdrücken könnte. Man kann nämlich den Tuple direkt in seine Bestandteile zerlegen.&lt;span style='font-family:Consolas; font-size:10pt'&gt;&lt;br /&gt;				&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;let&lt;/span&gt; (success,value) = dict.TryGetValue(&lt;span style='color:maroon'&gt;"A"&lt;/span&gt;)&lt;/span&gt;&lt;span style='font-size:8pt'&gt;&lt;br /&gt;				&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;val value : int = 1&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;val success : bool = true&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New'&gt;&lt;span style='font-size:10pt'&gt;&lt;span style='color:blue'&gt;let&lt;/span&gt; (success,value) = dict.TryGetValue(&lt;span style='color:maroon'&gt;"C"&lt;/span&gt;)&lt;/span&gt;&lt;span style='font-size:5pt'&gt;&lt;br /&gt;					&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;val value : int = 0&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;val success : bool = false&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;h1&gt;Fazit&lt;br /&gt;&lt;/h1&gt;&lt;p&gt;Für meine Begriffe ist dies ein gutes Bespiel wie ausdrucksstark F# ist. In der Vergangeneheit sind viele Fehler im Programmiersprachendesign gemacht worden. Allem voran C++, aber leider auch bei C#. Tuples sind ein hervoragendes Mittel, um &lt;em&gt;out&lt;/em&gt; Parameter zu vermeiden. Da Tuple in .NET 4.0 ein "first Class" Datentyp ist, gibt es keinen Grund mehr diesen nicht auch in C# als Alternative zu &lt;em&gt;out&lt;/em&gt; Parametern zu verweden. Letztendlich macht es aber mit F# mehr Spaß!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Over und &lt;em&gt;out&lt;/em&gt;!&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1363207308265120314-3518657633522041599?l=hiq-software.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiq-software.blogspot.com/feeds/3518657633522041599/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1363207308265120314&amp;postID=3518657633522041599' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/3518657633522041599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/3518657633522041599'/><link rel='alternate' type='text/html' href='http://hiq-software.blogspot.com/2010/03/f-und-der-umgang-mit-out-parametern.html' title='F# und der Umgang mit out Parametern'/><author><name>HiQ-Software</name><uri>http://www.blogger.com/profile/17952163358850374510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1363207308265120314.post-6854766409329493513</id><published>2010-02-24T18:43:00.004Z</published><updated>2010-02-24T18:49:49.410Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='off topic'/><title type='text'>Cassidy Marie shipped</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/_c4ehIbstBAc/S4VzvAlWSBI/AAAAAAAAADA/90vOBg1ApOE/s1600-h/2D.bmp"&gt;&lt;img style="WIDTH: 206px; HEIGHT: 223px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5441882976194807826" border="0" alt="" src="http://2.bp.blogspot.com/_c4ehIbstBAc/S4VzvAlWSBI/AAAAAAAAADA/90vOBg1ApOE/s400/2D.bmp" /&gt;&lt;/a&gt;&lt;br /&gt;Beta&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_c4ehIbstBAc/S4Vzu83ApBI/AAAAAAAAAC4/NthZ8AU8V1c/s1600-h/3D.jpg"&gt;&lt;img style="WIDTH: 220px; HEIGHT: 270px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5441882975195145234" border="0" alt="" src="http://3.bp.blogspot.com/_c4ehIbstBAc/S4Vzu83ApBI/AAAAAAAAAC4/NthZ8AU8V1c/s400/3D.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;Release Candidate&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_c4ehIbstBAc/S4VzvjUPkFI/AAAAAAAAADI/-tei1ZReknI/s1600-h/Cassy.jpg"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 293px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5441882985518305362" border="0" alt="" src="http://1.bp.blogspot.com/_c4ehIbstBAc/S4VzvjUPkFI/AAAAAAAAADI/-tei1ZReknI/s400/Cassy.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;Cassidy Marie shipped&lt;br /&gt;&lt;br /&gt;Die glücklichen und schlaflosen Eltern&lt;br /&gt;Marika und Benjamin Gopp&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1363207308265120314-6854766409329493513?l=hiq-software.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiq-software.blogspot.com/feeds/6854766409329493513/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1363207308265120314&amp;postID=6854766409329493513' title='2 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/6854766409329493513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/6854766409329493513'/><link rel='alternate' type='text/html' href='http://hiq-software.blogspot.com/2010/02/cassidy-marie-shipped.html' title='Cassidy Marie shipped'/><author><name>HiQ-Software</name><uri>http://www.blogger.com/profile/17952163358850374510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_c4ehIbstBAc/S4VzvAlWSBI/AAAAAAAAADA/90vOBg1ApOE/s72-c/2D.bmp' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1363207308265120314.post-8437093360940558317</id><published>2010-02-12T10:17:00.001Z</published><updated>2010-02-12T10:17:00.713Z</updated><title type='text'>F#: Units of Measure</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Mit dem diese Woche erschienenen Release Candidate von VS2010, hat sich auch was bei F# getan. Wie Don Syme in seinem Blog schreibt, ist der F# Compiler auf Version 2.0 heraufgesetzt worden. Das bedeutet F# ist ausgereift um es produktiv einzusetzen (Obwohl viele es bereits mit früheren Version eingesetzt haben). Zeit sich also endlich ernsthaft mit F# und seinen genialen Features zu beschäftigen!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Ein Feature über das ich heute schreiben möchte sind &lt;em&gt;Units of Measure&lt;/em&gt; oder zu Deutsch &lt;em&gt;Maßeinheiten&lt;/em&gt;. Bei diesem Feature geht es um das Problem bei der Verwendung von unterschiedlichen Maßeinheiten im Code. Wie der Unfall des NASA Mars Climate Orbiter 1999 zeigt, kommt es auch heute noch zu Fehlern auf Grund der Verwendung von unterschiedlichen Maßeinheiten. Mittlerweile wird auch in der USA in Wissenschaft und Technik das Metrische System verwendet. Ein Zulieferer hatte jedoch in Pfund und Fuß gerechnet, was letztlich dazu führte, dass die Mars Sonde verglühte. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;Dieses Feature hat also einen relativ ernsten Hintergrund. Damit solche Fehler sich nicht in Produktivcode einschleichen verwendet F# eine erweiterte statische Codeanalyse. Maßeinheiten werden dabei mit Attributen annotiert und bei Ihrer Verwendung vom Compiler auf Korrektheit geprüft. Dabei wird jedoch nicht nur geprüft ob der entsprechende Typ korrekt ist, sondern auch ob die Funktion in dem man diesen Typ verwendet, mathematisch korrekt ist. Durch die intelligente Typinferenz in F# können sogar abgeleitete Maßeinheiten ermittelt werden.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Nun wie funktioniert das? In C# könnte man eine gewisse Art der Typsicherheit hinbekommen, indem man für Maßeinheit einen eigenen Typen erstellt. Somit würde der Compiler beim Verwenden des Types dessen Typsicherheit garantieren. Was jedoch nicht möglich ist, dass auch auf die Einhaltung der mathematischen Regeln geprüft wird. Dies könnte man vielleicht zur Laufzeit realisieren in dem man für Maßeinheiten entsprechende Rules definiert. Letzlich würde aber eine Prüfung zur Laufzeit nicht den Absturz einer 100.000 km entfernten Sonde verhindern können. Die Prüfung muss also viel früher, also zur Compilezeit erfolgen.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Noch ein Hinweis: Units of Measure können nur mit &lt;strong&gt;Gleitkommazahlen&lt;/strong&gt; verwendet werden! Dies liegt daran, dass man nicht nur dumme Maßeinheiten verwenden kann, sondern auch physikalische Größen wie Beschleunigung etc. Dies würde nicht mit Integers oder anderen Typen funktionieren. (Tatsächlich kann man aber Units of Measure mit Komplexen Zahlen oder Vektoren verwenden)&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Ein Beispiel:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Man definiert zunächst die Maßeinheiten die man verwenden will als Typen. Diese Typen attributiert man mit&lt;span style='font-family:Courier New; font-size:12pt'&gt;[&amp;lt;Measure&amp;gt;]&lt;/span&gt;. (So sehen Attribute in F# aus. Eine Misschung aus C# und VB Attribute)&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:12pt'&gt;[&amp;lt;Measure&amp;gt;] &lt;span style='color:blue'&gt;type&lt;/span&gt; kg&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:12pt'&gt;[&amp;lt;Measure&amp;gt;] &lt;span style='color:blue'&gt;type&lt;/span&gt; s&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:12pt'&gt;[&amp;lt;Measure&amp;gt;] &lt;span style='color:blue'&gt;type&lt;/span&gt; m&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;Nun können wir Formeln schreiben. Wir wollen wissen, mit welcher Geschwindigkeit  wir auf der Erde aufkommen, wenn wir aus einer bestimmten Höhe springen. Zunächst definieren wir die Höhe als Gleitkommazahl und auf welche Maßeinheit sich diese bezieht.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:12pt'&gt;&lt;span style='color:blue'&gt;let&lt;/span&gt; höhe = 2.0&amp;lt;m&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;Nun definieren wir die Gravitation. Diese ist eine Beschleunigungskraft: also Gravitationskonstate mal Meter pro Sekunde im Quadrat&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:12pt'&gt;&lt;span style='color:blue'&gt;let&lt;/span&gt; gravitation = 9.81&amp;lt;m/s^2&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;Wir können nun ausrechnen wie groß die Geschwindigkeit ist, mit der man auf der Erde auftrifft.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:12pt'&gt;&lt;span style='color:blue'&gt;let&lt;/span&gt; geschwindigkeit = sqrt (2.0 * gravitation * höhe)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;F# Interactive sagt uns, dass die Geschwindigkeit in Metern pro Sekunde berechnet wird.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:12pt'&gt;val geschwindigkeit : float&amp;lt;m/s&amp;gt; = 14.00714104&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;Demnach schlgt man mit 14 Metern pro Sekunde bei einem Sprung aus 2 Metern Höhe auf der Erde auf. Gut zu wissen!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Im F# Power Pack sind weitere Standardmaßeinheinten definiert, so dass man nicht jedes mal alle Naturgesetze herunterbeten muss. Auf der anderen Seite stellt sich die Frage, wann man dieses Feature wirklich brauch. Hier zeigt sich wieder das F# eine super Ergänzung zu bestehenden C# Code ist, jedoch keinesfalls den Anspruch erhebt C# in seiner Gesamtheit abzulösen. Bisher sind noch keine Überlegungen gemacht worden, Units of Measure auch nach C# zu portieren oder sogar in die CLR. Man wird mit der Zeit sehen müssen, ob dieses und andere Feature auch nach C# portiert werden, oder ob es dann keinen Grund mehr geben würde F# zu verwenden. Das wäre außerst schade!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Viel Spaß beim Ausprobieren mit F#&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Benjamin&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1363207308265120314-8437093360940558317?l=hiq-software.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiq-software.blogspot.com/feeds/8437093360940558317/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1363207308265120314&amp;postID=8437093360940558317' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/8437093360940558317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/8437093360940558317'/><link rel='alternate' type='text/html' href='http://hiq-software.blogspot.com/2010/02/f-units-of-measure.html' title='F#: Units of Measure'/><author><name>HiQ-Software</name><uri>http://www.blogger.com/profile/17952163358850374510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1363207308265120314.post-8022573509545788121</id><published>2010-01-26T07:54:00.001Z</published><updated>2010-01-26T07:54:52.118Z</updated><title type='text'>Top Ten Free Extensions for Visual Studio 2010</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Kate Gregory hat auf Codeproject eine Top 10 der Erweiterungen für Visual Studio 2010 zusammengestellt.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Darunter auch meine Erweiterung die "&lt;span style='font-size:12pt'&gt;&lt;strong&gt;ZoomEditorMargin&lt;/strong&gt;&lt;/span&gt;". Meine Beschreibung findet ihr hier: &lt;a href='http://hiq-software.blogspot.com/2009/10/vs2010-extension-zoomeditormargin.html'&gt;http://hiq-software.blogspot.com/2009/10/vs2010-extension-zoomeditormargin.html&lt;/a&gt;&lt;br /&gt;			&lt;/p&gt;&lt;p&gt;Ein Video von meiner Extension kann man sich bei Youtube ansehen &lt;a href='http://www.youtube.com/watch?v=sM_20hptWDc'&gt;http://www.youtube.com/watch?v=sM_20hptWDc&lt;/a&gt;&lt;br /&gt;			&lt;/p&gt;&lt;p&gt;Weitere Tools und die entsprechenden Videos hierzu findet ihr unter &lt;a href='http://www.codeproject.com/KB/macros/TopTenFreeExtensions2010.aspx'&gt;http://www.codeproject.com/KB/macros/TopTenFreeExtensions2010.aspx&lt;/a&gt;&lt;br /&gt;			&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;Benjamin&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1363207308265120314-8022573509545788121?l=hiq-software.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiq-software.blogspot.com/feeds/8022573509545788121/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1363207308265120314&amp;postID=8022573509545788121' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/8022573509545788121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/8022573509545788121'/><link rel='alternate' type='text/html' href='http://hiq-software.blogspot.com/2010/01/top-ten-free-extensions-for-visual.html' title='Top Ten Free Extensions for Visual Studio 2010'/><author><name>HiQ-Software</name><uri>http://www.blogger.com/profile/17952163358850374510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1363207308265120314.post-5347118144946130637</id><published>2009-11-17T11:34:00.001Z</published><updated>2009-11-17T11:34:04.302Z</updated><title type='text'>VSTO 4.0 Runtime</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Die VSTO 4.0 Runtime wird nicht installiert, wenn man Office 2010 bereits installiert hat. Stattdessen wird die VSTO 3.5 Runtime installiert!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Warum? Keine Ahnung!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Mehr Informationen findet man unter: &lt;a href='http://msdn.microsoft.com/en-us/library/bb608603(VS.100).aspx'&gt;http://msdn.microsoft.com/en-us/library/bb608603(VS.100).aspx&lt;/a&gt;&lt;br /&gt;			&lt;/p&gt;&lt;p&gt;Wer die Installation nachholen will kann die Runtime über den entsprechenden Bootstrapper installieren. Der wird nämlich installiert.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Der Bootstrapper Pfad lautet: C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages\VSTOR40&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1363207308265120314-5347118144946130637?l=hiq-software.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiq-software.blogspot.com/feeds/5347118144946130637/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1363207308265120314&amp;postID=5347118144946130637' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/5347118144946130637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/5347118144946130637'/><link rel='alternate' type='text/html' href='http://hiq-software.blogspot.com/2009/11/vsto-40-runtime.html' title='VSTO 4.0 Runtime'/><author><name>HiQ-Software</name><uri>http://www.blogger.com/profile/17952163358850374510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1363207308265120314.post-3550806089669464855</id><published>2009-10-20T15:27:00.005+01:00</published><updated>2009-10-20T15:37:50.168+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='VS2010'/><title type='text'>VS2010 Extension: ZoomEditorMargin</title><content type='html'>&lt;p&gt;VS2010 Beta2 ist endlich draußen. Kaum heruntergeladen und installiert, habe ich auch schon die erste Erweiterung für den neuen WPF Codeeditor geschrieben!&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Besonders gespannt war ich auf die Zoom Funktion des Codeeditors. Als ich VS2010 zum ersten Mal öffnete, war ich jedoch etwas enttäuscht. Auf der linken Seite des Code Editors befand sich lediglich eine Combobox, über die man den Zoom einstellen kann. Aus meiner Erfahrung mit Office 2007, hätte ich jedoch gerne einen Slider gehabt, mit dem ich stufenlos zoomen könnte.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Zum Glück lässt sich der neue WPF Codeeditor in VS2010 an allen Ecken und Enden anpassen. Gesagt getan, habe ich eine eigene "Margin" für den Editor geschrieben. Eine Margin ist ein Bereich im Codeeditor, in dem man ein WPF Control platzieren kann. Dies ist nur eine von vielen Möglichkeiten den Codeeditor anzupassen und zu erweitern.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Wer das &lt;a href="http://visualstudiogallery.msdn.microsoft.com/en-us/c271d574-a481-4974-b7dd-f319404de898"&gt;ZoomEditorMargin&lt;/a&gt; herunterladen und direkt ausprobieren möchte, kann dies in der ,&lt;a href="http://4.bp.blogspot.com/_c4ehIbstBAc/St3JcWIblrI/AAAAAAAAACY/Eeqg0Hi9s9A/s1600-h/image1.png"&gt;&lt;img style="WIDTH: 247px; HEIGHT: 34px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5394689417474184882" border="0" alt="" src="http://4.bp.blogspot.com/_c4ehIbstBAc/St3JcWIblrI/AAAAAAAAACY/Eeqg0Hi9s9A/s400/image1.png" /&gt;&lt;/a&gt; oder über den ExtensionManager in VisualStudio tun.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Der Code Editor &lt;span style="TEXT-DECORATION: underline"&gt;ohne&lt;/span&gt; Zoom Extension&lt;br /&gt;&lt;/h3&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_c4ehIbstBAc/St3Jvq9-BjI/AAAAAAAAACo/JhnOAn_BUow/s1600-h/image2.png"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 335px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5394689749484963378" border="0" alt="" src="http://4.bp.blogspot.com/_c4ehIbstBAc/St3Jvq9-BjI/AAAAAAAAACo/JhnOAn_BUow/s400/image2.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Der Code Editor &lt;span style="TEXT-DECORATION: underline"&gt;mit&lt;/span&gt; Zoom Extension&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_c4ehIbstBAc/St3JwaZFgkI/AAAAAAAAACw/rWMaoyPZ2bA/s1600-h/image3.jpeg"&gt;&lt;img style="WIDTH: 400px; HEIGHT: 316px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5394689762215166530" border="0" alt="" src="http://2.bp.blogspot.com/_c4ehIbstBAc/St3JwaZFgkI/AAAAAAAAACw/rWMaoyPZ2bA/s400/image3.jpeg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In den nächsten Posts werde ich erklären, wie ich diese Extension erstellt habe. Es gibt viele Aspekte, auf die ich näher eingehen möchte. Deswegen verrate ich nicht alles schon in diesem Blog Post.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Viel Spaß und stay tuned&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Benny&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1363207308265120314-3550806089669464855?l=hiq-software.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiq-software.blogspot.com/feeds/3550806089669464855/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1363207308265120314&amp;postID=3550806089669464855' title='1 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/3550806089669464855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/3550806089669464855'/><link rel='alternate' type='text/html' href='http://hiq-software.blogspot.com/2009/10/vs2010-extension-zoomeditormargin.html' title='VS2010 Extension: ZoomEditorMargin'/><author><name>HiQ-Software</name><uri>http://www.blogger.com/profile/17952163358850374510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_c4ehIbstBAc/St3JcWIblrI/AAAAAAAAACY/Eeqg0Hi9s9A/s72-c/image1.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1363207308265120314.post-7498301033534267740</id><published>2009-10-15T09:41:00.002+01:00</published><updated>2009-10-15T09:42:55.152+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reactive Framework'/><title type='text'>Stirnrunzeln über: "Stirnrunzeln über das Neuste von Microsoft seit geschnitten Brot"</title><content type='html'>&lt;span xmlns=""&gt; &lt;p&gt;Ralf Westphal schrieb in seinem Blog "Stirnrunzeln über das Neuste von Microsoft seit geschnitten Brot", über das neue Reaktive Framework (Rx) von Microsoft. Zunächst wollte ich einen Kommentar in sein Blog schreiben. Der Kommentar ist dann etwas länger ausgefallen, so dass ich mich entschieden habe, einen eigenen Blog Eintrag mit meiner Meinung zu diesem Thema zu schreiben. Ralf fordert sogar zu Reaktionen auf: &lt;em&gt;"Oder übersehe ich hier die eigentliche Erfindung? Geht der brillante Innovationshub an mir vorbei? Ich bitte um Erhellung"&lt;/em&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Also versuch ich doch etwas Licht ins Dunkeln zu bringen.&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;Wo ist das Problem?!&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;Für Ralf besteht das Problem an dieser neuen Technologie, dass er ein "&lt;em&gt;neues Vokabular für etwas Altes&lt;/em&gt;" benutzen muss. Nach dem Motto: &lt;strong&gt;Raider ist jetzt Twix&lt;/strong&gt;. Klar, wenn etwas Neues mit einem alten Begriff besetzt ist und das Neue immer mit dem Alten assoziiert wird, sinkt natürlich die Akzeptanz für das Neue. Heißt das aber, dass da Neue schlecht ist? Das kann ich (noch) nicht beurteilen. Trotzdem bin ich Neuem erst mal aufgeschlossen eingestellt.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Was ist also das Alte? Für Ralf ist das Alte: &lt;strong&gt;Complex Event Processing (CEP).&lt;/strong&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3&gt;"Das ist nicht neu, das ist kein Hexenwerk".&lt;br /&gt;&lt;/h3&gt;&lt;p&gt;Aber das ist doch mit den meisten Erfindungen so! Irgendwo hat's Irgendwer bereits erfunden. Das Neue sieht nur hübscher aus: "&lt;em&gt;es ist eben keine tolle neue Erfindung seit geschnitten Brot, sondern etwas lange Bekanntes in aufgehübschtes Gewand gekleidet&lt;/em&gt;". Ja, das ist vermutlich so.&lt;br /&gt;&lt;/p&gt;&lt;h3&gt;"Tut mir leid, da ist nichts Neues für mich dabei. Wenn ich im etablierten Paradigma data flow denke, dann ist das etwas uraltes und kann mit heutigen Mitteln bewältigt werden."&lt;br /&gt;&lt;/h3&gt;&lt;p&gt;Ralf, das mag für dich alles "kalter Kaffee" sein. Aber hallo? Data flow, etabliert? Wo denn bitte? In welcher Firma die Software Entwicklung ist denn dieses Paradigma etabliert? Frag doch aber bitte mal deine Kunden, die Teilnehmer der CCD Seminare, die Besucher einer Konferenz, die Zuhörer deiner Vorträge. Wer von denen:&lt;br /&gt;&lt;/p&gt;&lt;ul style="MARGIN-LEFT: 54pt"&gt;&lt;li&gt;hat von CEP, Esper oder CCR gehört?&lt;br /&gt;&lt;/li&gt;&lt;li&gt;hat einen Artikel über CEP, Esper oder CCR gelesen (von dir oder jemand anders)?&lt;br /&gt;&lt;/li&gt;&lt;li&gt;verwendet CEP, Esper oder CCR produktiv in seinen Buisiness Anwendungen?&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Antwort: &lt;em&gt;fast&lt;/em&gt;&lt;br /&gt;&lt;strong&gt;Niemand&lt;/strong&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Das ist das Problem: Für Dich und einige Wenige ist das alles Schnee von gestern (siehe 1. Kommentar von Holger Hofstätte). Für die breite Masse, absolutes Neuland.&lt;br /&gt;&lt;/p&gt;&lt;h3&gt;"Wer das wirklich einmal ausprobieren will, was man mit einer Abfragesprache auf Event-Strömen tun kann, dann kann mit NEsper spielen"&lt;br /&gt;&lt;/h3&gt;&lt;p&gt;Nein Ralf, ich will nichts ausprobieren, ich will auch nicht nur damit spielen. Ich möchte diese Funktionalität im .NET Framework haben und produktiv sein.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:16;"&gt;&lt;strong&gt;Reaktive Programmierung wird im Core .NET Framework vorhanden sein. Das ist das Neue! Das ist Etablierung!&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;h2&gt;Was ist mit LINQ&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;Zur Erinnerung: für Ralf besteht das Problem am Reactive Framework, dass es das alles schon einmal gab. Was war aber gleich nochmal LINQ?&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Das Konzept hinter LINQ kommt aus der funktionalen Programmierung (Map, Filter, Reduce). Anscheinend hatte hier Ralf keine oder nicht genügend Berührungspunkte mit der funktionalen Programmierung, dass er automatsch LINQ mit einer längst erfundenen Technologie assoziiert hätte. Zumindest wird Erik Meijer für sein "Brainchild" LINQ gelobt, jedoch nicht für seine anderen Projekte (z.B: Volta und Rx).&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Funktionale Programmierung war doch auch nur ein akademisches Thema. Vielleicht ist man im Studium mit LISP, ML oder Miranda in Berührung gekommen. Angekommen im Berufsleben hat man aber seine Daten über geschachtelte for-Schleifen gefiltert. Von wegen Map, Filter, Reduce. Obwohl die Technologie doch bereits in .NET vorhanden war (Delegates, Iteratoren). Trotzdem hat es keiner genutzt. Aber dann kam LINQ daher und mit ein bischen "syntactic sugar" für C#, etabliert sich ein Konzept aus der funktionalen Programmierung auch in einer objektorientierten Programmiersprache wie .NET. Und da das Konzept im Framework verankert ist, ist LINQ sogar für alle.NET basierten Programmiersprachen verfügbar.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Erst mit LINQ hat sich das funktionale Paradigma in der breiten Masse etabliert. Immer mehr Leute benutzen LINQ Queries um ihre Listen zu projizieren, filtern und aggregieren. Immer mehr Leute verwenden Lambda Ausdrücke für die alltäglichsten Dinge.&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;BetaMax vs. VHS, HD vs. BlueRay&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;LINQ hat da eine Tür aufgestoßen, das Reaktive Framework wird das gleiche machen und den Weg in den Mainstream finden&lt;br /&gt;&lt;/p&gt;&lt;h3&gt;"Flows habe ich aber natürlich nicht erfunden. Die sind alt"... "Mainstream ist es aber nicht geworden, wie wir sehen. Schade. Denn die Schritte in einem Flow steigern die Evolvierbarkeit von Software, finde ich"&lt;br /&gt;&lt;/h3&gt;&lt;p&gt;Ralf, das ist doch genau dein Wunsch, dass das Konzept den Weg in den Mainstream findet. Welche Technologie letztendlich das Rennen macht spielt doch keine Rolle. Ob BetaMax oder VHS, HD oder BlueRay, CEP oder Rx.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;h2&gt;Fazit&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;Es gab schon immer Erfindungen, die nur einem kleinen elitären Bereich in Industrie und Forschung, zugänglich oder erschlossen waren. Nur weil es eine Technologie in einem kleinem Bereich Anklang gefunden hat, kann man nicht sagen die Technologie sei &lt;strong&gt;etabliert&lt;/strong&gt;. Erst wenn sie es in den Mainstream geschafft hat, kann man von Etablierung sprechen. LINQ ist ein super Beispiel dafür, dass ein akademisches Thema dem Mainstream zugänglich wird.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;CEP, Esper und CCR haben sich nicht etabliert und werden sich nicht etablieren.Das Reactive Framework wird sich aber etablieren. Warum? Ganz einfach, es wird Kernbestandteil von .NET sein und damit zugänglich und allgegenwärtig für .NET Entwickler. Kein separates Tool, kein irgendwo runterladen, kein rumspielen. Es wird einfach da sein. Bleibt nur noch es auch zu nutzen...&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1363207308265120314-7498301033534267740?l=hiq-software.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiq-software.blogspot.com/feeds/7498301033534267740/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1363207308265120314&amp;postID=7498301033534267740' title='1 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/7498301033534267740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/7498301033534267740'/><link rel='alternate' type='text/html' href='http://hiq-software.blogspot.com/2009/10/stirnrunzeln-uber-uber-das-neuste-von.html' title='Stirnrunzeln über: &amp;quot;Stirnrunzeln über das Neuste von Microsoft seit geschnitten Brot&amp;quot;'/><author><name>HiQ-Software</name><uri>http://www.blogger.com/profile/17952163358850374510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1363207308265120314.post-1622844556681061059</id><published>2009-06-25T08:18:00.001+01:00</published><updated>2009-06-25T08:18:54.467+01:00</updated><title type='text'>F# - Teil 1</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Vorgestern habe ich einen Vortrag bei der User Group Köln über F# gehalten. Dort habe ich über meine Erfahrungen mit F# geredet und ein paar Sprachfeatures gezeigt. Leider waren 30 Minuten viel zu wenig um alles zu zeigen und auch noch Fragen zu beantworten. In den kommenden Blogeinträgen werde ich daher meine Erfahrungen mit F# schriftlich festhalten.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;F# ist eine neue Programmiersprache in der .NET Familie. Diese wird in VS2010 neben VB und C# eine der Hauptsprachen für die .NET Entwicklung werden; so der Plan.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='color:#17365d; font-size:13pt'&gt;&lt;strong&gt;Déjà-vu&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Als ich zum ersten Mal die Beta1 von VisualStudio 2010 öffnete, hatte ich ein Déjà-vu Erlebnis. F# hatte ich bereits in VS2008 ausprobiert, aber erst mit VS2010 ist mir bewusst geworden, was Microsoft da eigentlich vor hat. Und dann lief es mir eiskalt den Rücken runter. Denn als ich zum ersten Mal vor ca. 6 Jahren ein VisualStudio 2003 installierte, um .NET zu lernen, stand neben VB und C# eine weitere Programmiersprache zur Auswahl; und das war &lt;strong&gt;J#&lt;/strong&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Welchen Weg J# gegangen ist, muss ich nicht erwähnen. (Wer noch aktiv in J# programmiert, der möge sich bitte bei mir melden!). Könnte das gleiche Schicksal F# ereilen?&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;J# vs. F#&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;Die Frage ist, ob nur weil F# in VS2010 bereits vorinstalliert ist und man es sich nicht separat herunterladen muss, dieses dann auch öfters genutzt wird. Bei J# hat das ja auch nicht geholfen.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Nun, auf den ersten Blick hat F# ein schlechtes "Karma". Warum kann man aber doch sagen, das F# seinen Weg machen wird?&lt;br /&gt;&lt;table border='0' style='border-collapse:collapse'&gt;&lt;colgroup&gt;&lt;col style='width:189px'/&gt;&lt;col style='width:136px'/&gt;&lt;col style='width:136px'/&gt;&lt;col style='width:121px'/&gt;&lt;/colgroup&gt;&lt;tbody valign='top'&gt;&lt;tr style='background: #4f81bd'&gt;&lt;td style='padding-left: 9px; padding-right: 9px; border-top:  solid #7ba0cd 1.0pt; border-left:  solid #7ba0cd 1.0pt; border-bottom:  solid #7ba0cd 1.0pt; border-right:  none'&gt; &lt;/td&gt;&lt;td style='padding-left: 9px; padding-right: 9px; border-top:  solid #7ba0cd 1.0pt; border-left:  none; border-bottom:  solid #7ba0cd 1.0pt; border-right:  none'&gt;&lt;p&gt;&lt;span style='color:white'&gt;&lt;strong&gt;J#&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 9px; padding-right: 9px; border-top:  solid #7ba0cd 1.0pt; border-left:  none; border-bottom:  solid #7ba0cd 1.0pt; border-right:  none'&gt;&lt;p&gt;&lt;span style='color:white'&gt;&lt;strong&gt;C#&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 9px; padding-right: 9px; border-top:  solid #7ba0cd 1.0pt; border-left:  none; border-bottom:  solid #7ba0cd 1.0pt; border-right:  solid #7ba0cd 1.0pt'&gt;&lt;p&gt;&lt;span style='color:white'&gt;&lt;strong&gt;F#&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='background: #d3dfee'&gt;&lt;td style='padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  solid #7ba0cd 1.0pt; border-bottom:  solid #7ba0cd 1.0pt; border-right:  none'&gt;&lt;p&gt;&lt;strong&gt;Paradigma&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid #7ba0cd 1.0pt; border-right:  none'&gt;&lt;p&gt;objektorientiert&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid #7ba0cd 1.0pt; border-right:  none'&gt;&lt;p&gt;objektorientiert&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid #7ba0cd 1.0pt; border-right:  solid #7ba0cd 1.0pt'&gt;&lt;p&gt;funktional&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style='padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  solid #7ba0cd 1.0pt; border-bottom:  solid #7ba0cd 1.0pt; border-right:  none'&gt;&lt;p&gt;&lt;strong&gt;Sprachfamilie&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid #7ba0cd 1.0pt; border-right:  none'&gt;&lt;p&gt;C&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid #7ba0cd 1.0pt; border-right:  none'&gt;&lt;p&gt;C&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid #7ba0cd 1.0pt; border-right:  solid #7ba0cd 1.0pt'&gt;&lt;p&gt;ML&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style='background: #d3dfee'&gt;&lt;td style='padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  solid #7ba0cd 1.0pt; border-bottom:  solid #7ba0cd 1.0pt; border-right:  none'&gt;&lt;p&gt;&lt;strong&gt;Kompatibilität&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid #7ba0cd 1.0pt; border-right:  none'&gt;&lt;p&gt;JAVA&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid #7ba0cd 1.0pt; border-right:  none'&gt;&lt;p&gt;-&lt;/p&gt;&lt;/td&gt;&lt;td style='padding-left: 9px; padding-right: 9px; border-top:  none; border-left:  none; border-bottom:  solid #7ba0cd 1.0pt; border-right:  solid #7ba0cd 1.0pt'&gt;&lt;p&gt;OCAML&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h5&gt;Vergleich von J# und F#&lt;br /&gt;&lt;/h5&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;Der Vergleich zeigt, dass sich J# und C# einfach zu ähnlich sind, als dass es einen wirklichen Gewinn bringen wurde. Wer Java programmieren will, der macht das mit Java und nicht mit J#. Zumal man mit Eclipse eine weitaus bessere Entwicklungsumgebung hat. F# hat hingegen nichts mit C# zu tun. Die Sprache basiert nicht auf C sonder auf ML (Meta Language). Auch die Art der Programmierung ist anders, nämlich funktional. Microsoft hat jedoch mit F# ein paar Zugeständnisse gemacht. F# bezeichnet sich selber als "Multi Paradigmen" Programmiersprache, im Gegensatz zu reinen funktionalen Programmiersprachen wie Haskell. Man kann z.B. mit F# objektorientierte Klassenbibliotheken definieren, die von anderen .NET Programmen aufgerufen werden können. &lt;br /&gt;&lt;/p&gt;&lt;h2&gt;Fazit&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;F# kann nicht mir J# verglichen werden, auch wenn es viele Ähnlichkeiten aufweist. Nicht in der Art der Syntax, sondern in der Art wie F# marketingtechnisch platziert wird. Ich vermute ganz stark, dass F# einen großen Einfluss auf die Weiterentwicklung von C# und .NET haben wird. F# hat dazu beigetragen, dass C# 2.0 Generics erhalten hat. Für C# 3.0 und LINQ wurden weitere Konzepte der funktionalen Welt in die objektorientierte Welt übertragen: Typinferenz, Lambda Ausdrücke und das sehr esoterische Konzept der Monadentheorie. Ich spekuliere dass C# 5.0, nachdem C# 4.0 Features aus der dynamischen Welt bekommen hat, wieder Konzepte aus der funktionalen Welt adaptieren wird. Meine Wunschfeatures für C# 5.0 sind: Pattern Matching, erweiterte Typinferenz, und Metaprogrammierung.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Ich glaube, dass man folgendes plakativ von F# sagen kann (andere funktionale Sprachen eingeschlossen):&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Dank F# gibt es Generics. Dank F# gibt es Lambda Ausdrücke. Dank F# gibt es LINQ.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Danke F#!&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;Ausblick&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;Ich habe vor ein paar grundlegende Blogeinträge zu F# zu schreiben. Im nächsten Blog Eintrag wird es darum gehen, warum man eigentlich F# verwenden sollte.&lt;/p&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1363207308265120314-1622844556681061059?l=hiq-software.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiq-software.blogspot.com/feeds/1622844556681061059/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1363207308265120314&amp;postID=1622844556681061059' title='1 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/1622844556681061059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/1622844556681061059'/><link rel='alternate' type='text/html' href='http://hiq-software.blogspot.com/2009/06/f-teil-1.html' title='F# - Teil 1'/><author><name>HiQ-Software</name><uri>http://www.blogger.com/profile/17952163358850374510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1363207308265120314.post-2078978652178385626</id><published>2009-03-18T15:11:00.001Z</published><updated>2009-03-18T15:11:14.582Z</updated><title type='text'>Silverlight 3</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;WOW! &lt;br /&gt;&lt;/p&gt;&lt;p&gt;Bereits vor der eigentlichen Ankündigung bei der Keynote auf der Mix09, ist das Silverlight 3 SDK freigegeben worden. Ob es jetzt offiziell ist, weiß ich nicht - auf jeden Fall kann man es jetzt schon downloaden ;-))&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Als WPF Entwickler war ich eher enttäuscht von Silverlight 2. Ein intuitives programmieren war nicht möglich. Eigentlich war es nur ein Krampf. Also habe ich beschlossen "Silverlight" erst mal "silverNight" sein zu lassen. Bis ... ja bis heute.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Auf die Schnell konnte ich folgende interessanten, lang erwarteten und teilweise überraschenden Neuerungen feststellen.&lt;br /&gt;&lt;/p&gt;&lt;h3&gt;ObservableCollection&amp;lt;T&amp;gt;&lt;br /&gt;&lt;/h3&gt;&lt;p&gt;Wie bereits aus WPF bekannt, implementiert diese Collection das &lt;em&gt;INotifyCollectionChanged&lt;/em&gt; Interface. Damit können Controls feststellen, ob sich etwas an dieser Collections geändert hat, also Items hinzugefügt oder gelöscht wurden, so dass man die UI aktuallisieren kann. Siehe ItemsControl und ListBox&lt;br /&gt;&lt;/p&gt;&lt;h3&gt;ICollectionView&lt;br /&gt;&lt;/h3&gt;&lt;p&gt;Eng mit der ObservableCollection sind die sog. CollectionViews verbunden. In WPF gibt es diverse View Implementiereungen, &lt;em&gt;ItemsCollectionView&lt;/em&gt;, &lt;em&gt;EnumerationCollectionView&lt;/em&gt;, &lt;em&gt;ListCollectionView&lt;/em&gt;, &lt;em&gt;BindingListCollectionView&lt;/em&gt;. Diese gibt es aber &lt;strong&gt;nicht&lt;/strong&gt; in Silverlight 3.&lt;br /&gt;&lt;/p&gt;&lt;h3&gt;PagedCollectionView&lt;br /&gt;&lt;/h3&gt;&lt;p&gt;Interessanterweise gibt es aber die &lt;em&gt;PagedCollectionView&lt;/em&gt;; die es aber nicht in WPF gibt...&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Nachwievor bewegen sich WPF und Silverlight immer noch stark auseinander. Leider.&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;Animationen&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;Für Animationen gibt es jetzt "&lt;strong&gt;Ease&lt;/strong&gt;" Funktionen. Diese interpolieren eine Funktion die z.B. eine Beschleunigung simuliert. So kann man z.B. auch einen Ball springen lassen.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;In WPF kann man solche Effekte über "KeySplines" erzeugen, aber auch diese gibt es nicht in Silverlight.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;Weitere Neuerungen werden noch gepostet. Stay tuned.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;So jetzt schnell nach Hause, damit ich mir die Keynote live gestreamt angucken kann!&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1363207308265120314-2078978652178385626?l=hiq-software.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiq-software.blogspot.com/feeds/2078978652178385626/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1363207308265120314&amp;postID=2078978652178385626' title='1 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/2078978652178385626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/2078978652178385626'/><link rel='alternate' type='text/html' href='http://hiq-software.blogspot.com/2009/03/silverlight-3.html' title='Silverlight 3'/><author><name>HiQ-Software</name><uri>http://www.blogger.com/profile/17952163358850374510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1363207308265120314.post-5279095935065184389</id><published>2009-01-28T11:13:00.002Z</published><updated>2009-01-28T11:15:11.471Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><title type='text'>WPF Window als Vollbild</title><content type='html'>&lt;span xmlns=""&gt;&lt;p&gt;Ein WPF Fenster kann auch im Vollbildmodus angezeigt werden und somit den gesamten Bildschirmplatz einnehmen ohne die Windowsstartleiste&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Wie funktioniert das?&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Nun, es ist einfacher als man denkt. Dafür braucht man keine nativen Windows APIs aufzurufen.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Folgender XAML Code zeigt wie es geht:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Window&lt;/span&gt;&lt;span style="color:red;"&gt; x&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;Class&lt;/span&gt;&lt;span style="color:blue;"&gt;="WpfApplication1.Window1"&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:red;"&gt;x&lt;/span&gt;&lt;span style="color:blue;"&gt;="http://schemas.microsoft.com/winfx/2006/xaml"&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:red;"&gt;Title&lt;/span&gt;&lt;span style="color:blue;"&gt;="Window1"&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:red;"&gt;WindowStyle&lt;/span&gt;&lt;span style="color:blue;"&gt;="None"&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:red;"&gt;WindowState&lt;/span&gt;&lt;span style="color:blue;"&gt;="Maximized"&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:red;"&gt;WindowStartupLocation&lt;/span&gt;&lt;span style="color:blue;"&gt;="CenterScreen"&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:#a31515;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:red;"&gt; Background&lt;/span&gt;&lt;span style="color:blue;"&gt;="Red"&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:#a31515;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Grid&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Window&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Zunächst wir der &lt;em&gt;WindowState&lt;/em&gt; mit Maximized angegeben. Das bewirkt natürlich dass das Fenster den gesamten Bildschirm ausfüllt.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Den ganzen Bildschirm? Nein, denn unten (oder oben) [oder auch an den Seiten] befindet sich die Windows Taskbar. &lt;span style="font-family:Courier New;font-size:10;color:blue;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Wird nun der &lt;em&gt;WindowStyle&lt;/em&gt; wird auf &lt;em&gt;None&lt;/em&gt; gesetzt, hat das Fenster keinen Rahmen, also auch keine Titelleiste und Controlbar.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Allerdings verschwindet nun auch die Taskbar und das Fenster füllt tatsächlich den gesamten Screen aus.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Nun kann z.B. eine Photoshow starten.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;Problematisch wird es, wenn der Anwender versucht das Fenster zu schließen, denn es fehlt ja die Titelleiste mit dem Schließen bzw. Minimieren Button. Man sollte daher noch auf Events der Tasten ESC oder F11 reagieren. Diese werden standardmäßig in Vollbild Applikationen verwendet, um in den normalen Fenstermodus zurückzukehren.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;partial&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;class&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#2b91af;"&gt;Window1&lt;/span&gt; : &lt;span style="color:#2b91af;"&gt;Window&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; Window1()&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;InitializeComponent();&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.KeyDown = RootKey;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;void&lt;/span&gt; RootKey(&lt;span style="color:blue;"&gt;object&lt;/span&gt; sender, &lt;span style="color:#2b91af;"&gt;KeyEventArgs&lt;/span&gt; e)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; ((e.Key == &lt;span style="color:#2b91af;"&gt;Key&lt;/span&gt;.Escape)  (e.Key == &lt;span style="color:#2b91af;"&gt;Key&lt;/span&gt;.F11))&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (&lt;span style="color:blue;"&gt;this&lt;/span&gt;.WindowStyle == &lt;span style="color:#2b91af;"&gt;WindowStyle&lt;/span&gt;.None)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.WindowStyle = &lt;span style="color:#2b91af;"&gt;WindowStyle&lt;/span&gt;.ThreeDBorderWindow;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.WindowState = &lt;span style="color:#2b91af;"&gt;WindowState&lt;/span&gt;.Normal;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;else&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.WindowStyle = &lt;span style="color:#2b91af;"&gt;WindowStyle&lt;/span&gt;.None;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.WindowState = &lt;span style="color:#2b91af;"&gt;WindowState&lt;/span&gt;.Maximized;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;e.Handled = &lt;span style="color:blue;"&gt;true&lt;/span&gt;;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;font-size:10;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;Ob dieses Feature beabsichtigt ist; weiß ich nicht. Ob dieses Feature jede Anwendung benötigt? Eher nicht.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Wer allerdings eine Vollbild Anwendung entwicklen will, der kann auch das mit WPF tun, und zwar mit relativ wenig Aufwand.&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1363207308265120314-5279095935065184389?l=hiq-software.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiq-software.blogspot.com/feeds/5279095935065184389/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1363207308265120314&amp;postID=5279095935065184389' title='1 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/5279095935065184389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/5279095935065184389'/><link rel='alternate' type='text/html' href='http://hiq-software.blogspot.com/2009/01/wpf-window-als-vollbild.html' title='WPF Window als Vollbild'/><author><name>HiQ-Software</name><uri>http://www.blogger.com/profile/17952163358850374510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1363207308265120314.post-1192333306095725610</id><published>2008-10-08T11:08:00.002+01:00</published><updated>2008-10-08T11:15:54.410+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PDC08'/><title type='text'>PDC08: new XAML features</title><content type='html'>XAML ist DIE deklarative Programmiersprache für .NET.&lt;br /&gt;&lt;br /&gt;Sie findet hauptsächlich Anwendung in WPF, aber auch in WF und WCF&lt;br /&gt;&lt;br /&gt;Auf der PDC wird sich eine Session rund um XAML drehen. Es wird gezeigt wie eine Anwendung komplett deklarativ in XAML geschrieben werden kann.&lt;br /&gt;&lt;br /&gt;XAML wird außerdem mit XOML aus der Workflow Foundation vereinigt. Man darf gespannt sein auf welche Anwendungsbereiche XAML ausgeweitet werden wird.&lt;br /&gt;&lt;br /&gt;Neue XAML Features werden sein:&lt;br /&gt;- support für generics&lt;br /&gt;- object references&lt;br /&gt;- non default constructors&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;cu @ PDC&lt;br /&gt;Benjamin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1363207308265120314-1192333306095725610?l=hiq-software.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiq-software.blogspot.com/feeds/1192333306095725610/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1363207308265120314&amp;postID=1192333306095725610' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/1192333306095725610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/1192333306095725610'/><link rel='alternate' type='text/html' href='http://hiq-software.blogspot.com/2008/10/pdc08-new-xaml-features.html' title='PDC08: new XAML features'/><author><name>HiQ-Software</name><uri>http://www.blogger.com/profile/17952163358850374510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1363207308265120314.post-6039059062520526858</id><published>2008-10-08T09:31:00.003+01:00</published><updated>2008-10-08T09:57:31.009+01:00</updated><title type='text'>C# 4.0: dynamic</title><content type='html'>&lt;div&gt;C# wird dynamisch!&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Das erste publik gemachte Feature von C# 4.0 sind dynamic lookups. Diese werden durch das neue Schlüsselwort - &lt;span style="font-family:courier new;font-size:130%;color:#3333ff;"&gt;&lt;strong&gt;dynamic&lt;/strong&gt;&lt;/span&gt; - ermöglicht.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Dynamic lookups ermöglichen das Auflösen von Namen zur Laufzeit und nicht zur Compilezeit. Das bedeutet, dass dies ein neues Runtime Feature ist, denn ein Sprachfeature von C#. Alle .NET Sprachen können also diesen dynamic lookup verwenden. VB.NET konnte dieses Szenario bereits umsetzen - besser bekannt als "Late Binding" - , musste jedoch deafür auf eigene Methoden aus der Microsoft.VisualBasic.dll zurückgreifen. (Daher musste man bisher immer diese DLL deployen, wenn man .NET in VB programmiert hat).&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Dynamic Lookups sind in der DLR (Dynamic Language Runtime) implementiert und für dynamische Sprachen unerlässlich.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Das folgende Beispiel ist den Slides der Keynote von Anders Hejsberg auf der JAOO entnommen&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;a href="http://1.bp.blogspot.com/_c4ehIbstBAc/SOx1p8mHlYI/AAAAAAAAACA/18Wx_HcqbMM/s1600-h/dynamic.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5254704228735620482" style="CURSOR: hand" alt="" src="http://1.bp.blogspot.com/_c4ehIbstBAc/SOx1p8mHlYI/AAAAAAAAACA/18Wx_HcqbMM/s400/dynamic.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1363207308265120314-6039059062520526858?l=hiq-software.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiq-software.blogspot.com/feeds/6039059062520526858/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1363207308265120314&amp;postID=6039059062520526858' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/6039059062520526858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/6039059062520526858'/><link rel='alternate' type='text/html' href='http://hiq-software.blogspot.com/2008/10/c-40-dynamic.html' title='C# 4.0: dynamic'/><author><name>HiQ-Software</name><uri>http://www.blogger.com/profile/17952163358850374510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_c4ehIbstBAc/SOx1p8mHlYI/AAAAAAAAACA/18Wx_HcqbMM/s72-c/dynamic.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1363207308265120314.post-8708699312682742485</id><published>2008-09-10T08:45:00.002+01:00</published><updated>2008-09-10T09:02:08.810+01:00</updated><title type='text'>Olso und D#</title><content type='html'>Während die PDC immer näher rückt, werden die ersten heiß erwarteten Neuerungen bekannt. Unteranderem kommen immer mehr Details zum Vorschein, zu der langerwarteten Plattform Olso, die Teil des .NET Framework 4.0 sein wird.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.pluralsight.com/community/blogs/dbox/default.aspx"&gt;Don Box&lt;/a&gt; ist einer der Architekten von Oslo und gibt in seinem Blog kleine versteckte Hinweise. Heute wies er auf einen interessanten &lt;a href="http://www.eweek.com/c/a/Windows/The-Origins-of-Microsofts-Oslo-Software-Modeling-Platform/"&gt;Artikel &lt;/a&gt;hin, der weitere Geheimnisse zu Olso enthüllt.&lt;br /&gt;&lt;br /&gt;Nach LINQ wird dieses Jahr ein weiterer Hammer vorgestellt werden:&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;Textuelle Domain Specific Languages (DSL)&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Microsoft hat bereits ein DSL Toolkit mit dem man graphische DSL erstellen kann. Diese können dann über einen Designer in VisualStudio verwendet werden. Das Neuartige and denOslo DSL ist, dass sie wie eine eigene Programmiersprache funktionieren; also textuell. Diese TDSL basieren auf dem Microsoft Research Projekt TLA+ (T-emporalen L-ogik der A-ktionen)&lt;br /&gt;&lt;br /&gt;Übrigens der Codename für diese TDSL ist "D".&lt;br /&gt;Vielleicht bekommen wir nach C# nun ein D# !?&lt;br /&gt;&lt;br /&gt;C.U. at PDC&lt;br /&gt;Benjamin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1363207308265120314-8708699312682742485?l=hiq-software.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiq-software.blogspot.com/feeds/8708699312682742485/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1363207308265120314&amp;postID=8708699312682742485' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/8708699312682742485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/8708699312682742485'/><link rel='alternate' type='text/html' href='http://hiq-software.blogspot.com/2008/09/olso-und-d.html' title='Olso und D#'/><author><name>HiQ-Software</name><uri>http://www.blogger.com/profile/17952163358850374510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1363207308265120314.post-225202810134109260</id><published>2008-05-29T06:32:00.002+01:00</published><updated>2008-05-29T06:38:14.779+01:00</updated><title type='text'>PDC2008 I'm comming</title><content type='html'>Bei der letzten PDC habe ich mir noch alle Sessions online angesehen. &lt;br /&gt;&lt;br /&gt;Jetzt bin ich LIVE dabei!&lt;br /&gt;&lt;br /&gt;Themen werden sein:&lt;br /&gt;&lt;br /&gt;- The Live Developer platform, including the MESH.&lt;br /&gt;- Cloud Computing" from computation, to storage and much more! &lt;br /&gt;- Visual Studio 10" and .NET Framework 4.0&lt;br /&gt;- ASP.NET Futures including v.next of MVC, Ajax and Dynamic data&lt;br /&gt;- Silverlight Futures, including Silverlight for business applications&lt;br /&gt;- And much, much more.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1363207308265120314-225202810134109260?l=hiq-software.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiq-software.blogspot.com/feeds/225202810134109260/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1363207308265120314&amp;postID=225202810134109260' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/225202810134109260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/225202810134109260'/><link rel='alternate' type='text/html' href='http://hiq-software.blogspot.com/2008/05/pdc2008-im-comming.html' title='PDC2008 I&apos;m comming'/><author><name>HiQ-Software</name><uri>http://www.blogger.com/profile/17952163358850374510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1363207308265120314.post-5955030797474717359</id><published>2008-05-08T16:27:00.001+01:00</published><updated>2008-05-08T16:27:55.024+01:00</updated><title type='text'>StackPanel Items in umgekehrter Reihenfolge anzeigen</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Das StackPanel in WPF kann Controls untereinander anordnen.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Mit der Eigenschaft Orientation=Horizontal ist es möglich auch die Elemente von Links nach Rechts anzuordnen.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Es gibt aber keine Eigenschaft StackItemsFrom="Top|Bottom".&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Natürlich kann man ein eigenes StackPanel implementieren, das dies kann. Es geht aber auch einfacher.&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;Am Anfang war das ItemsControl&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;Wir benötigen zunächst ein ItemsControl. Ein ItemsControl kann beliebige Objekte, also auch Double, Boolean, Person etc., aufnehmen. Ein Panel hingegen nur Controls.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Das ItemControl benötigt jedoch ein Panel um die Objekte darstellen zu können. Standardmäßig ist dies ein StackPanel. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;Über die Eigenschaft ItemsPanel können wir ein ItemsPanelTemplate definieren, und ein anderes von Panel abgeleiteten "Panel" angeben, in das nun die Items angeordnet werden.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Wie die Objekte aussehen bestimmt ein DataTemplate. Für jedes Objekt generiert das ItemsControl einen Container (ContentPresenter, für ListBox -&amp;gt; ListBoxItem). Da man auf diesen Container nicht direkt zugreifen kann, definiert das ItemsControl eine Property um den Style für den "ItemContainer" festlegen zu können. &lt;br /&gt;&lt;/p&gt;&lt;h2&gt;Verkehrte Welt&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;Um nun die Elemente von unten nach oben statt von oben nach unten anordnen zu können, wie es das StackPanel macht, benötigen wir ein anderes Panel. Ein DockPanel ist geeignet, da es mehr als eine Möglichkeit gibt, Elemente in ihm anzuordnen. (Top,Left,Right,Bottom).&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Nun müssen wir noch im ItemContainerStyle festlegen, dass die Elemente jeweils von Unten angeordnet werden sollen.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:#a31515'&gt;&lt;br /&gt;					&lt;/span&gt;&lt;span style='color:blue'&gt;&amp;lt;&lt;/span&gt;&lt;span style='color:#a31515'&gt;ItemsControl&lt;/span&gt;&lt;span style='color:blue'&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:#a31515'&gt;&lt;br /&gt;					&lt;/span&gt;&lt;span style='color:blue'&gt;&amp;lt;&lt;/span&gt;&lt;span style='color:#a31515'&gt;ItemsControl.ItemsPanel&lt;/span&gt;&lt;span style='color:blue'&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:#a31515'&gt;&lt;br /&gt;					&lt;/span&gt;&lt;span style='color:blue'&gt;&amp;lt;&lt;/span&gt;&lt;span style='color:#a31515'&gt;ItemsPanelTemplate&lt;/span&gt;&lt;span style='color:blue'&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:#a31515'&gt;&lt;br /&gt;					&lt;/span&gt;&lt;span style='color:blue'&gt;&amp;lt;&lt;/span&gt;&lt;span style='color:#a31515'&gt;DockPanel&lt;/span&gt;&lt;span style='color:red'&gt; VerticalAlignment&lt;/span&gt;&lt;span style='color:blue'&gt;="Top"&lt;/span&gt;&lt;span style='color:red'&gt; LastChildFill&lt;/span&gt;&lt;span style='color:blue'&gt;="False" /&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:#a31515'&gt;&lt;br /&gt;					&lt;/span&gt;&lt;span style='color:blue'&gt;&amp;lt;/&lt;/span&gt;&lt;span style='color:#a31515'&gt;ItemsPanelTemplate&lt;/span&gt;&lt;span style='color:blue'&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:#a31515'&gt;&lt;br /&gt;					&lt;/span&gt;&lt;span style='color:blue'&gt;&amp;lt;/&lt;/span&gt;&lt;span style='color:#a31515'&gt;ItemsControl.ItemsPanel&lt;/span&gt;&lt;span style='color:blue'&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:#a31515'&gt;&lt;br /&gt;					&lt;/span&gt;&lt;span style='color:blue'&gt;&amp;lt;&lt;/span&gt;&lt;span style='color:#a31515'&gt;ItemsControl.ItemContainerStyle&lt;/span&gt;&lt;span style='color:blue'&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:#a31515'&gt;&lt;br /&gt;					&lt;/span&gt;&lt;span style='color:blue'&gt;&amp;lt;&lt;/span&gt;&lt;span style='color:#a31515'&gt;Style&lt;/span&gt;&lt;span style='color:blue'&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:#a31515'&gt;&lt;br /&gt;					&lt;/span&gt;&lt;span style='color:blue'&gt;&amp;lt;&lt;/span&gt;&lt;span style='color:#a31515'&gt;Setter&lt;/span&gt;&lt;span style='color:red'&gt; Property&lt;/span&gt;&lt;span style='color:blue'&gt;="DockPanel.Dock"&lt;/span&gt;&lt;span style='color:red'&gt; Value&lt;/span&gt;&lt;span style='color:blue'&gt;="Bottom"/&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:#a31515'&gt;&lt;br /&gt;					&lt;/span&gt;&lt;span style='color:blue'&gt;&amp;lt;/&lt;/span&gt;&lt;span style='color:#a31515'&gt;Style&lt;/span&gt;&lt;span style='color:blue'&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:#a31515'&gt;&lt;br /&gt;					&lt;/span&gt;&lt;span style='color:blue'&gt;&amp;lt;/&lt;/span&gt;&lt;span style='color:#a31515'&gt;ItemsControl.ItemContainerStyle&lt;/span&gt;&lt;span style='color:blue'&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;        &lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:#a31515'&gt;&lt;br /&gt;					&lt;/span&gt;&lt;span style='color:blue'&gt;&amp;lt;&lt;/span&gt;&lt;span style='color:#a31515'&gt;Button&lt;/span&gt;&lt;span style='color:blue'&gt;&amp;gt;&lt;/span&gt;&lt;span style='color:#a31515'&gt;1&lt;/span&gt;&lt;span style='color:blue'&gt;&amp;lt;/&lt;/span&gt;&lt;span style='color:#a31515'&gt;Button&lt;/span&gt;&lt;span style='color:blue'&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:#a31515'&gt;&lt;br /&gt;					&lt;/span&gt;&lt;span style='color:blue'&gt;&amp;lt;&lt;/span&gt;&lt;span style='color:#a31515'&gt;Button&lt;/span&gt;&lt;span style='color:blue'&gt;&amp;gt;&lt;/span&gt;&lt;span style='color:#a31515'&gt;2&lt;/span&gt;&lt;span style='color:blue'&gt;&amp;lt;/&lt;/span&gt;&lt;span style='color:#a31515'&gt;Button&lt;/span&gt;&lt;span style='color:blue'&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:#a31515'&gt;&lt;br /&gt;					&lt;/span&gt;&lt;span style='color:blue'&gt;&amp;lt;&lt;/span&gt;&lt;span style='color:#a31515'&gt;Button&lt;/span&gt;&lt;span style='color:blue'&gt;&amp;gt;&lt;/span&gt;&lt;span style='color:#a31515'&gt;3&lt;/span&gt;&lt;span style='color:blue'&gt;&amp;lt;/&lt;/span&gt;&lt;span style='color:#a31515'&gt;Button&lt;/span&gt;&lt;span style='color:blue'&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:#a31515'&gt;&lt;br /&gt;					&lt;/span&gt;&lt;span style='color:blue'&gt;&amp;lt;/&lt;/span&gt;&lt;span style='color:#a31515'&gt;ItemsControl&lt;/span&gt;&lt;span style='color:blue'&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2&gt;Et Voila&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p/&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1363207308265120314-5955030797474717359?l=hiq-software.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiq-software.blogspot.com/feeds/5955030797474717359/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1363207308265120314&amp;postID=5955030797474717359' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/5955030797474717359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/5955030797474717359'/><link rel='alternate' type='text/html' href='http://hiq-software.blogspot.com/2008/05/stackpanel-items-in-umgekehrter.html' title='StackPanel Items in umgekehrter Reihenfolge anzeigen'/><author><name>HiQ-Software</name><uri>http://www.blogger.com/profile/17952163358850374510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1363207308265120314.post-2503116735557874034</id><published>2008-05-08T12:04:00.001+01:00</published><updated>2008-05-08T12:04:39.566+01:00</updated><title type='text'>AttachedProperties richtig initialisieren</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Manchmal ist es angebracht, nachdem sich ein Objekt bei einem AttachedProperty registriert hat, einige Initialisierungen durchzuführen. Hierbei kann in der Set Methode, nach dem Setzen des AttachedProperty, z.B. eine Initialisierungsmethode aufgerufen werden.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;public&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;static&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;void&lt;/span&gt; SetAttachedProperty(&lt;span style='color:#2b91af'&gt;DependencyObject&lt;/span&gt; obj, &lt;span style='color:blue'&gt;int&lt;/span&gt; value)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    obj.SetValue(AttachedProperty, value);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    InitializeProperty();&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Die Set-Methode macht nichts Weiteres, als bei dem übergebenen DependencyObjekt &lt;span style='font-family:Courier New; font-size:10pt'&gt;SetValue&lt;/span&gt; aufzurufen. Der eigentliche Wert der AttachedProperty wird also wie eine ganz normale DependencyProperty gesetzt. Stellen Sie sich einfach vor, eine DependencyProperty ist nichts anderes als ein Schlüssel der zusammen mit einem Wert in einem Dictionary gespeichert wird. Jedes DependencyObject hat so ein Dictionary. Die Werte können aber auch von anderen Objekten abgefragt und gesetzt werden.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Um eine AttachedProperty zu setzen, reicht es tatsächlich lediglich die DependencyProperty am eigenen Objekt zu setzen und nicht am Containerobjekt durch &lt;span style='font-family:Courier New; font-size:10pt'&gt;Set[Property]&lt;/span&gt;! Das bedeutet aber auch, dass die Initialisierungsmethode nicht mehr aufgerufen wird, da die AttachedProperty über einen anderen Weg gesetzt wird. Nun kann man es natürlich zur Konvention machen in dem in einem API vorschreibt, dass AttachedProperties immer über &lt;span style='font-family:Courier New; font-size:10pt'&gt;Set[Property]&lt;/span&gt; gesetzt werden müssen. So ist der XAMLReader drauf angewiesen, dass wenn er eine AttachedProperty im Markup erkennt, auch eine entsprechende Set-Methode verfügbar ist, die er aufrufen kann.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Trotzdem ist es besser eine Initialisierung anders durchzuführen. Wie? Über einen Callbackmechanismus. Jede DependencyProperty verfügt über Metadaten die es erlauben, Code bzw. Callbacks für Validierungen, Änderungen etc. zu hinterlegen. Ändert sich z.B. der Wert einer DependencyProperty, so wird der Callback aufgerufen und die Initialisierung kann durchgeführt werden. Dieser Mechanismus funktioniert unabhängig davon wie eine DependencyProperty, gesetzt wurde.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;public&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;static&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;readonly&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:#2b91af'&gt;DependencyProperty&lt;/span&gt; PropertyWithCallback; &lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='color:green; font-family:Courier New; font-size:10pt'&gt;//Definition der Metadaten mit Callback&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:#2b91af'&gt;PropertyMetadata&lt;/span&gt; metadata = &lt;span style='color:blue'&gt;new&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:#2b91af'&gt;PropertyMetadata&lt;/span&gt;();&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;metadata.PropertyChangedCallback += OnPropertyWithCallbackChanged;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='color:green; font-family:Courier New; font-size:10pt'&gt;//Registrierung der DependencyProperty&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;PropertyWithCallback = &lt;span style='color:#2b91af'&gt;DependencyProperty&lt;/span&gt;.RegisterAttached(&lt;span style='color:#a31515'&gt;"PropertyWithCallback"&lt;/span&gt;,&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;typeof&lt;/span&gt;(&lt;span style='color:blue'&gt;int&lt;/span&gt;), &lt;span style='color:blue'&gt;typeof&lt;/span&gt;(&lt;span style='color:#2b91af'&gt;Window1&lt;/span&gt;), metadata);&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='color:green; font-family:Courier New; font-size:10pt'&gt;//Der Callback ruft die eigentliche Initializierungsmethode auf&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;private&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;static&lt;/span&gt;&lt;br /&gt;					&lt;span style='color:blue'&gt;void&lt;/span&gt; OnPropertyWithCallbackChanged(&lt;span style='color:#2b91af'&gt;DependencyObject&lt;/span&gt; obj, &lt;span style='color:#2b91af'&gt;DependencyPropertyChangedEventArgs&lt;/span&gt; value)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;{&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;    InitializeProperty();&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1363207308265120314-2503116735557874034?l=hiq-software.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiq-software.blogspot.com/feeds/2503116735557874034/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1363207308265120314&amp;postID=2503116735557874034' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/2503116735557874034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/2503116735557874034'/><link rel='alternate' type='text/html' href='http://hiq-software.blogspot.com/2008/05/attachedproperties-richtig.html' title='AttachedProperties richtig initialisieren'/><author><name>HiQ-Software</name><uri>http://www.blogger.com/profile/17952163358850374510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1363207308265120314.post-2955860404016950676</id><published>2008-05-07T08:36:00.002+01:00</published><updated>2008-05-07T09:01:27.756+01:00</updated><title type='text'>Eigene Linien in Grid Panel zeichnen</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Das Grid ist das Mächtigste und am Häufigsten gebrauchte Panel in WPF.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Mit der Eigenschaft "ShowGridLines" lassen sich Hilfslinien anzeigen.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;&amp;lt;&lt;/span&gt;&lt;span style='color:#a31515'&gt;Grid&lt;/span&gt;&lt;span style='color:red'&gt; ShowGridLines&lt;/span&gt;&lt;span style='color:blue'&gt;="True"&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='color:blue; font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_c4ehIbstBAc/SCFgenHSMxI/AAAAAAAAAA8/6weQ4embPhA/s1600-h/image1.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_c4ehIbstBAc/SCFgenHSMxI/AAAAAAAAAA8/6weQ4embPhA/s400/image1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5197541523974140690" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;/p&gt;&lt;p&gt;Diese Linien dienen nur als Hilfestellung für den Entwickler, der so die Position der Spalten und Reihen erkennen kann.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Leider kann man nicht selber bestimmen wie diese Linien aussehen. Oder etwas doch?&lt;span style='color:blue; font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;    &lt;/span&gt;&lt;/p&gt;&lt;h2&gt;Was passiert eigentlich im Grid wenn  ShowGridLines=True gesetzt wird?&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;WPF-Controls können sich selbst zeichnen, in dem sie die OnRender Methode überschreiben. Wie dies auch bei OnPaint in WinForms der Fall ist.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Doch beim Grid wird davon nicht Gebrauch gemacht um die Linien zu zeichnen! Stattdessen wird zu den logischen UI-Elementen in dem Panel ein zusätzliches visuelles Element der "GridLinesRenderer" hinzugefügt. Dies geschieht nicht per ControlTemplate. (Templates ändern ebenfalls das Aussehen also den VisualTree), sonder programmatisch durch den Aufruf von AddVisualChild(visual) in der Basisklasse. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;Der GridLinesRenderer ist von DrawingVisual abgeleitet. UIElement und DrawingVisual haben also den Selben Vorfahr "Visual". DrawingVisuals sind jedoch wesentlichen performanter als UIElements, da sie direkt auf den "Bildschrim" (WPF-Subsystem) zeichnen. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;Der VisualTree im XamlPad zeigt, dass neben dem logischen Child – einem Button - noch ein visuelles Element - der GridLinesRenderer  - in der Hierarchie zu finden ist.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_c4ehIbstBAc/SCFge3HSMyI/AAAAAAAAABE/w12VxJLO-Fo/s1600-h/image2.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_c4ehIbstBAc/SCFge3HSMyI/AAAAAAAAABE/w12VxJLO-Fo/s400/image2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5197541528269108002" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;   &lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;h2&gt;Möglichkeit 1: Einen eigenen GridLinesRenderer schreiben&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;Meine erste Idee war es einen eigenen GridLinesRenderer zu schreiben. Ganz nach dem Vorbild des in dem Grid zu findenden Renderer.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Das Problem ist, dass es nicht möglich ist den Renderer in den VisuallTree des Grid einzufügen. Die Methode die dieses möglich machen würde – AddVisualChild – ist nämlich protected.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Ein eigenes Grid zu erstellen, nur um die GridLinien zeichnen zu können war mir dann aber zu aufwändig. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;Es muss einen anderen Weg geben.&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;Möglichkeit 2: Einen GridLinesAdorner schreiben&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;Wenn es keine Möglichkeit gibt ein UIElement von Innen zu verändern ohne ein eigenes Control abzuleiten, so muss man es eben von Außen probieren. Das machen sog. Adorner.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Adorner "verzieren" ein UIElement. Wie, das bestimmt der Adorner. Wichtig ist, dass ein Adorner immer über einem UIElement gezeichnet wird. D.h. der Adorner verdeckt darunter liegende Zeichnungen.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;Public&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Class&lt;/span&gt; GridLinesAdorner&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Inherits&lt;/span&gt; Adorner&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Private&lt;/span&gt; Grid &lt;span style='color:blue'&gt;As&lt;/span&gt; System.Windows.Controls.Grid&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:green'&gt;'Übergabe des zu verzierenden Elements (hier Grid)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Sub&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;New&lt;/span&gt;(&lt;span style='color:blue'&gt;ByVal&lt;/span&gt; grid &lt;span style='color:blue'&gt;As&lt;/span&gt; System.Windows.Controls.Grid)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;MyBase&lt;/span&gt;.New(grid)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Me&lt;/span&gt;.Grid = grid&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;End&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Sub&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Private&lt;/span&gt; _pen &lt;span style='color:blue'&gt;As&lt;/span&gt; Pen&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:green'&gt;'Stift um die Linien zeichnen zu können&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Public&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Property&lt;/span&gt; Pen() &lt;span style='color:blue'&gt;As&lt;/span&gt; Pen&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Get&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Return&lt;/span&gt; _pen&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;End&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Get&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Set&lt;/span&gt;(&lt;span style='color:blue'&gt;ByVal&lt;/span&gt; value &lt;span style='color:blue'&gt;As&lt;/span&gt; Pen)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;            _pen = value&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;End&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Set&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;End&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Property&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:green'&gt;'Zeichnen der Linien&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Protected&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Overrides&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Sub&lt;/span&gt; OnRender(&lt;span style='color:blue'&gt;ByVal&lt;/span&gt; dc &lt;span style='color:blue'&gt;As&lt;/span&gt; System.Windows.Media.DrawingContext)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;If&lt;/span&gt; Pen &lt;span style='color:blue'&gt;Is&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Nothing&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Then&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Exit&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Sub&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;If&lt;/span&gt; Grid.ColumnDefinitions.Count &amp;gt; 0 &lt;span style='color:blue'&gt;Then&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Dim&lt;/span&gt; x &lt;span style='color:blue'&gt;As&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Double&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;For&lt;/span&gt; i &lt;span style='color:blue'&gt;As&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Integer&lt;/span&gt; = 1 &lt;span style='color:blue'&gt;To&lt;/span&gt; Grid.ColumnDefinitions.Count - 1&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;                x = Grid.ColumnDefinitions(i).Offset&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;                dc.DrawLine(Pen, &lt;span style='color:blue'&gt;New&lt;/span&gt; Point(x, 0), &lt;span style='color:blue'&gt;New&lt;/span&gt; Point(x, Grid.ActualHeight))&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Next&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;End&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;If&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;If&lt;/span&gt; grid.RowDefinitions.Count &amp;gt; 0 &lt;span style='color:blue'&gt;Then&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Dim&lt;/span&gt; y &lt;span style='color:blue'&gt;As&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Double&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;For&lt;/span&gt; i &lt;span style='color:blue'&gt;As&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Integer&lt;/span&gt; = 1 &lt;span style='color:blue'&gt;To&lt;/span&gt; Grid.RowDefinitions.Count - 1&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;                y = Grid.RowDefinitions(i).Offset&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;                dc.DrawLine(Pen, &lt;span style='color:blue'&gt;New&lt;/span&gt; Point(0, y), &lt;span style='color:blue'&gt;New&lt;/span&gt; Point(Grid.ActualWidth, y))&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Next&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;End&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;If&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;End&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Sub&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;End&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Class&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;Die Methode OnRender führt nun das Zeichnen der Gridlinien durch. Über die Row- und ColumnDefinitions des Grid, kann der Offset der einzelnen Spalten vom Grid abgerufen werden. Diese dienen uns als Koordination um an diesen Stellen die entsprechenden Linien zu zeichnen.&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;Anwenden des Adorners&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;Um den Adorner zum Einsatz zu bringen, müssen wir nun noch die Code-Behind Datei anpassen. Leider ist es nicht möglich den Adorner in XAML direkt anzuwenden. (Die Klasse AdornerDecorator ist nur dafür da einen Layer für ein zu verzierendes Element bereitzustellen, worauf ein Adorner angewendet werden kann; aber nicht für den Adorner selbst.)&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;Class&lt;/span&gt; Window1 &lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Private&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Sub&lt;/span&gt; Window1_Loaded(&lt;span style='color:blue'&gt;ByVal&lt;/span&gt; sender &lt;span style='color:blue'&gt;As&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Object&lt;/span&gt;, &lt;span style='color:blue'&gt;ByVal&lt;/span&gt; e &lt;span style='color:blue'&gt;As&lt;/span&gt; System.Windows.RoutedEventArgs) &lt;span style='color:blue'&gt;Handles&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Me&lt;/span&gt;.Loaded&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:green'&gt;'Layer für das Element holen in dem der Adorner gezeichnet wird&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Dim&lt;/span&gt; layer &lt;span style='color:blue'&gt;As&lt;/span&gt; AdornerLayer = AdornerLayer.GetAdornerLayer(&lt;span style='color:blue'&gt;Me&lt;/span&gt;.Grid)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:green'&gt;'Adorner mit Stift erstellen&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Dim&lt;/span&gt; adorner &lt;span style='color:blue'&gt;As&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;New&lt;/span&gt; GridLinesAdorner(Grid)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;        adorner.Pen = &lt;span style='color:blue'&gt;New&lt;/span&gt; Pen(Brushes.Black, 2)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:green'&gt;'Adorner dem Layer hinzufügen&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;        layer.Add(adorner)&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;End&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Sub&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;span style='font-family:Courier New; font-size:10pt'&gt;&lt;span style='color:blue'&gt;End&lt;/span&gt;&lt;br /&gt;     &lt;span style='color:blue'&gt;Class&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;h2&gt;Das Ergebnis&lt;br /&gt;&lt;/h2&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_c4ehIbstBAc/SCFgfHHSMzI/AAAAAAAAABM/1vp8lLPqKIs/s1600-h/image3.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_c4ehIbstBAc/SCFgfHHSMzI/AAAAAAAAABM/1vp8lLPqKIs/s400/image3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5197541532564075314" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;   &lt;/p&gt;&lt;p&gt;Wer noch einen Rahmen um das Grid herum haben möchte, der brauch nur noch das Grid in ein Border zu packen.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Achtung: Wie man sieht wird der Adorner &lt;span style='text-decoration:underline'&gt;über&lt;/span&gt; das Grid gezeichnet. Daher sind die Ränder der im Grid befindlichen Buttons nicht ganz zu sehen.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Hier muss dann noch ein entsprechendes Margin auf die Buttons angewendet werden um den richtigen Abstand zu den Gridinnenseiten zu ermöglichen.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1363207308265120314-2955860404016950676?l=hiq-software.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiq-software.blogspot.com/feeds/2955860404016950676/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1363207308265120314&amp;postID=2955860404016950676' title='1 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/2955860404016950676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/2955860404016950676'/><link rel='alternate' type='text/html' href='http://hiq-software.blogspot.com/2008/05/eigene-linien-in-grid-panel-zeichnen.html' title='Eigene Linien in Grid Panel zeichnen'/><author><name>HiQ-Software</name><uri>http://www.blogger.com/profile/17952163358850374510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_c4ehIbstBAc/SCFgenHSMxI/AAAAAAAAAA8/6weQ4embPhA/s72-c/image1.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1363207308265120314.post-8963095022364816941</id><published>2008-04-29T21:02:00.002+01:00</published><updated>2008-04-29T21:37:24.106+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><title type='text'>WPF goes Transitions</title><content type='html'>Effekte a la PowerPoint? Mit WPF kein Problem!?&lt;br /&gt;&lt;br /&gt;WPF bietet zwar Animationsunterstützungen, doch diese müssen mühsam programmiert werden. &lt;br /&gt;&lt;br /&gt;Nun gibt es ein Framework das Übergangseffekte für WPF bereitsstellt.&lt;br /&gt;z.B. Wipe, Fade, oder RotatingCube. Auch aufwendige 3D Animation sind frei verfügbar.&lt;br /&gt;&lt;br /&gt;Entwickelt hat dies &lt;a href="http://blogs.msdn.com/jbienz"&gt;Jaraed Bienz&lt;/a&gt;.&lt;br /&gt;Download auf CodePlex: &lt;a href="http://www.codeplex.com/transitionals"&gt;Transitionals&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Wer jetzt vielleicht sagt: "He, das habe ich schonmal gesehen!"&lt;br /&gt;der hat vollkommen recht. Auf der letzten Basta habe ich einen Vortrag über CAB gehalten und auch Acropolis vorgestellt. Für mich hatte Acropolis keine Zukunfstaussichten (Wurde ja auch eingestampft). Jedoch einige Bestandteile hatten Potential in WPF intigriert zu werden. U.a. auch das Transitionframework.&lt;br /&gt;&lt;br /&gt;Zwar ist das Transitionframework (noch) kein Teil von WPF. Aber dennoch sehr nützlich, zumal frei zugänglich und erweiterbar.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_c4ehIbstBAc/SBeGxnHSMwI/AAAAAAAAAA0/U6D0jc_n58U/s1600-h/clip_image001_2.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_c4ehIbstBAc/SBeGxnHSMwI/AAAAAAAAAA0/U6D0jc_n58U/s400/clip_image001_2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5194768882066404098" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1363207308265120314-8963095022364816941?l=hiq-software.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiq-software.blogspot.com/feeds/8963095022364816941/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1363207308265120314&amp;postID=8963095022364816941' title='1 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/8963095022364816941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/8963095022364816941'/><link rel='alternate' type='text/html' href='http://hiq-software.blogspot.com/2008/04/wpf-goes-transitions.html' title='WPF goes Transitions'/><author><name>HiQ-Software</name><uri>http://www.blogger.com/profile/17952163358850374510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_c4ehIbstBAc/SBeGxnHSMwI/AAAAAAAAAA0/U6D0jc_n58U/s72-c/clip_image001_2.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1363207308265120314.post-5502538582493603836</id><published>2007-12-10T17:24:00.000Z</published><updated>2007-12-10T17:27:40.767Z</updated><title type='text'>Basta! 2008 Spring Edition</title><content type='html'>Schon zum 2. Mal werde ich auf der BASTA! sprechen.&lt;br /&gt;&lt;br /&gt;Meine Session(s)&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Reflection in Action&lt;/h4&gt;&lt;br /&gt;Reflection gehört zu den coolesten und nützlichsten Features von .NET. In dieser Session schauen wir uns die bekannten und unbekannten Möglichkeiten von Reflection an. U.a. Wie performant ist Reflection und wie kann man die Performance optimieren? Wie generiert man dynamisch IL Code und kann ihn wieder auslesen!? Und vieles vieles mehr.&lt;br /&gt;&lt;br /&gt;Allein dafür lohnt es sich auf die BASTA! zukommen.&lt;br /&gt;&lt;br /&gt;Benny&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;!-- Software &amp; Support Verlag: BASTA! Speakerbutton --&gt;&lt;br /&gt;&lt;object width="160" height="160"&gt;&lt;param name="movie" value="http://www.entwickler.com/banner/extern/buttons/basta_speakerbutton.swf"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.entwickler.com/banner/extern/buttons/basta_speakerbutton.swf" type="application/x-shockwave-flash" wmode="transparent" width="160" height="160"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;!-- END Software &amp; Support Verlag: BASTA! Speakerbutton --&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1363207308265120314-5502538582493603836?l=hiq-software.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiq-software.blogspot.com/feeds/5502538582493603836/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1363207308265120314&amp;postID=5502538582493603836' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/5502538582493603836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/5502538582493603836'/><link rel='alternate' type='text/html' href='http://hiq-software.blogspot.com/2007/12/basta-2008-spring-edition.html' title='Basta! 2008 Spring Edition'/><author><name>HiQ-Software</name><uri>http://www.blogger.com/profile/17952163358850374510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1363207308265120314.post-4616217068411501113</id><published>2007-12-07T09:39:00.000Z</published><updated>2007-12-07T09:46:24.325Z</updated><title type='text'>PDC2008 announced!</title><content type='html'>Nachdem die PDC2007 ausgefallen ist, weil "zu wenig Neues" und die TechEd2007 Europe tatsächlich wenig Neues zu bieten hatte, findet sie nun statt:&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;die PDC2008 in Los Angeles!&lt;/h3&gt;&lt;br /&gt;&lt;a href="http://msdn2.microsoft.com/en-gb/events/bb288534.aspx"&gt;Link&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Vermutliche Themen:&lt;br /&gt;- .NET Framework 4.0&lt;br /&gt;- Volta (MSIL Recompiler)&lt;br /&gt;- Software + Services&lt;br /&gt;- WPF Composite Smart Clients&lt;br /&gt;- (hoffentlich neue (WPF Controls bzw. Features))&lt;br /&gt;- Silverlight 2.0 und DLR&lt;br /&gt;&lt;br /&gt;Urlaub ist schon geplant!&lt;br /&gt;&lt;br /&gt;Benny&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1363207308265120314-4616217068411501113?l=hiq-software.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiq-software.blogspot.com/feeds/4616217068411501113/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1363207308265120314&amp;postID=4616217068411501113' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/4616217068411501113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/4616217068411501113'/><link rel='alternate' type='text/html' href='http://hiq-software.blogspot.com/2007/12/pdc2008-announced.html' title='PDC2008 announced!'/><author><name>HiQ-Software</name><uri>http://www.blogger.com/profile/17952163358850374510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1363207308265120314.post-8953581660448724398</id><published>2007-10-30T07:39:00.000Z</published><updated>2007-10-30T08:29:30.911Z</updated><title type='text'>WPF Composite Clients formally known as  Acropolis</title><content type='html'>Das war es also mit "Acropolis". Dem Produkt das eigentlich CAB (Composite UI Application Block) ersetzen sollte...&lt;br /&gt;&lt;br /&gt;Hier die offizielle Bekanntmachung:&lt;br /&gt;&lt;a href="http://blogs.msdn.com/acropolis/rss.xml"&gt;Acropolis Team Blog&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Die Erkenntnisse aus dem Acropolis Projekt werden zerstückelt und fließen in die .NET Klassenbibliothek ein (Version 4.0?). Dies Vermutung habe ich bereits auf der BASTA! 2007 in Mainz geäußert, wo ich einen Vortrag über CAB gehalten habe und einen Ausblick auf Acropolis gezeigt habe. Ein Artikel für das dotnet Magazin war bereits in Arbeit. Aber eine innere Stimme hat mich zurückgehalten weiter zu machen. Jetzt weiß ich warum!&lt;br /&gt;&lt;br /&gt;Von Seiten der CAB-Community hagelte es eine Menge Kritik an Acropolis. Der Ärger bestand darin dass CAB und die Smart Client Software Factory nicht mehr weiterentwickelt werden. Stattdessen wurde das ehrgeizige Projekt Acropolis hochgezogen, dass viel wollte aber nichts konnte. Das größte Problem war eine nicht existierende Roadmap für das Produkt.&lt;br /&gt;&lt;br /&gt;Hier ein Kommentar dazu aus der CAB Comunity.&lt;br /&gt;&lt;a href="http://neverindoubtnet.blogspot.com/feeds/posts/default?alt=rss"&gt;&lt;br /&gt;Requiem for Acropolis; Fanfare for CAB + &lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Aber es gibt schon wieder ein Neues Projekt: WPF Composite Clients&lt;br /&gt;&lt;br /&gt;Diesmal wieder unter der Leitung der Patterns &amp; Practices Group. Hier fließt die ganze Erfahrung aus CAB mit ein. Acropolis ist (war) nähmlich ein Projekt der UIFX Teams, das für ASP.NET und WPF zuständig ist.&lt;br /&gt;&lt;br /&gt;Glen Block bescheibt in seinem Blog das neue Projekt.&lt;br /&gt;&lt;a href="http://blogs.msdn.com/gblock/archive/2007/10/26/wpf-composite-client-guidance-it-s-coming.aspx"&gt; Glenn Block&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;WPF Composite Client ist keine neue Version von CAB. Es wird eine neue Library und Guidance geben. Zielplattform ist WPF. Der Grund für den Aufbau einer neuen Klassenbibliothek besteht darin, dass CAB nicht für WPF designt wurde. WPF bringt eigene Konzepte wie Commands und RoutedEvents mit sich, die es in WinForms nicht gibt und somit auch nicht in CAB unterstützt werden.&lt;br /&gt;&lt;br /&gt;WPF bietet außerdem eine komplette andere "experience". Es wird daher &lt;strong&gt;keinen &lt;/strong&gt;Migrationspfad von WinForms geben. (So wie dies noch in Acropolis vorgesehen war). &lt;br /&gt;&lt;br /&gt;Wie herausklang wird es weiter Verbesserungen an WinForms geben! WinForms geht also noch nicht in Rente.&lt;br /&gt;&lt;br /&gt;Ich lass erstmal die Korken knallen, dass wir das Thema Acropolis hinter uns lassen können! Ich habe schon befürchtet, dass wir uns ernsthaft mit dem Produkt auseinandersetzen müssen!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1363207308265120314-8953581660448724398?l=hiq-software.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiq-software.blogspot.com/feeds/8953581660448724398/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1363207308265120314&amp;postID=8953581660448724398' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/8953581660448724398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/8953581660448724398'/><link rel='alternate' type='text/html' href='http://hiq-software.blogspot.com/2007/10/wpf-composite-clients-formally-known-as.html' title='WPF Composite Clients formally known as  Acropolis'/><author><name>HiQ-Software</name><uri>http://www.blogger.com/profile/17952163358850374510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1363207308265120314.post-1593211998754870559</id><published>2007-10-10T12:25:00.000+01:00</published><updated>2007-10-10T12:40:14.774+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='LINQ'/><title type='text'>CSV Dateien verarbeiten mit LINQ</title><content type='html'>Mein erster (langer) Artikel in der dotnetpro (&lt;a href="http://www.dotnetpro.de/"&gt;http://www.dotnetpro.de/&lt;/a&gt;) ist erschienen!&lt;br /&gt;&lt;br /&gt;Ich zeige, dass man mit LINQ nicht nur Datenbanken ansprechen kann, sondern ganz simple auch CSV Dateien einlesen, filtern und ausgeben kann. Mit LINQ und C# 3.0 ist das eine Sache von 3 Zeilen Code.&lt;br /&gt;&lt;br /&gt;Auf die Idee bin ich durch den Contest der dotnetpro gekommen. Die Aufgabenstellung war CSV Daten zu verarbeiten. Es war abzusehen, dass die jeder mit einer Datenbank angehen würde. Der eine verwendet SQLServer, der andere MySQL. Besonders beliebt bei dem Contest war aber SQLLight.&lt;br /&gt;&lt;br /&gt;Und der der Gewinner ist....&lt;br /&gt;&lt;br /&gt;Gewonnen habe ich dann, mit meiner Lösung nicht. Und das obwohl ich &lt;strong&gt;25% schneller&lt;/strong&gt; war als die Siegerlösung!!!&lt;br /&gt;(Ja Mama! Es waren wieder einmal die Flüchtigkeitsfehler)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1363207308265120314-1593211998754870559?l=hiq-software.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiq-software.blogspot.com/feeds/1593211998754870559/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1363207308265120314&amp;postID=1593211998754870559' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/1593211998754870559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/1593211998754870559'/><link rel='alternate' type='text/html' href='http://hiq-software.blogspot.com/2007/10/csv-dateien-verarbeiten-mit-linq.html' title='CSV Dateien verarbeiten mit LINQ'/><author><name>HiQ-Software</name><uri>http://www.blogger.com/profile/17952163358850374510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1363207308265120314.post-3846054066395930708</id><published>2007-09-22T16:14:00.000+01:00</published><updated>2007-09-22T16:31:09.779+01:00</updated><title type='text'>Neulich auf der BASTA</title><content type='html'>Hallo,&lt;br /&gt;&lt;br /&gt;da bin ich also Zurück vom Abenteuer BASTA. Ich kann nur sagen ich hab's überlebt!&lt;br /&gt;&lt;br /&gt;Die Keynote sollte eigentlich Dirk Primps halten. Das hat er aber irgendwie verpennt!&lt;br /&gt;Er wurde natürlich von den anden Speakern ständig daran aufgezogen.&lt;br /&gt;&lt;br /&gt;Das Essen beim Speakerdinner war nicht nach dem Geschmack der Meisten. So gab es z.B. Schafskäse an Raffaello. Das Essen auf der Konferenz war tiefkühlfraß und schlimmer als bei McDonalds. Kein Wunder, dass einige Teilnehmer und auch Speaker so ihre Probleme hatten. Holger S. hat seine Session mit Durchfall gehalten, Neno stand aber bereit um für Ihn einzuspringen.&lt;br /&gt;&lt;br /&gt;Christian Groß hat sich bei seinem Workshop, das Handy eines Teilnehmers geschnappt und sich damit auf den Boden geworfen! Er wollte das Thema Security etwas verdeutlichen.&lt;br /&gt;&lt;br /&gt;Der Oberhammer war Oliver Sturm. Hat er doch die 10 coolsten Features in C# 3.0 gezeigt. Er hat sich extra einen Timer programmiert und die Features auf die Sekunde vorgeführt. Man hat er die Leute weggeblasen. Er von Dingen geredet die die Leute noch in C# 5.0 kappieren werden.&lt;br /&gt;&lt;br /&gt;Feucht fröhlich ging es beim Abschlussessen weiter:&lt;br /&gt;Jörg N.: "Jetzt geht schon wieder die Diskussion los, was besser ist C# oder VB&lt;br /&gt;Jörg N.: "Ich bin einfach nur müde"&lt;br /&gt;Benny G.: "VB ist eine Lebenseinstellung"&lt;br /&gt;Daniel F.: "VB ist eine Krankheit"&lt;br /&gt;Oliver S.: "VB ist eine Lebenseinstellung -&lt;br /&gt;                   so wie Arbeitslosigkeit!" &lt;br /&gt;&lt;br /&gt;In diesem Sinne, bis zur nächsten BASTA!&lt;br /&gt;&lt;br /&gt;Benjamin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1363207308265120314-3846054066395930708?l=hiq-software.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiq-software.blogspot.com/feeds/3846054066395930708/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1363207308265120314&amp;postID=3846054066395930708' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/3846054066395930708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/3846054066395930708'/><link rel='alternate' type='text/html' href='http://hiq-software.blogspot.com/2007/09/neulich-auf-der-basta.html' title='Neulich auf der BASTA'/><author><name>HiQ-Software</name><uri>http://www.blogger.com/profile/17952163358850374510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1363207308265120314.post-8047599374232455406</id><published>2007-09-08T20:08:00.000+01:00</published><updated>2007-10-10T12:43:25.900+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='VisualStudio'/><title type='text'>Der Name "InitializeComponent" wurde nicht deklariert</title><content type='html'>Hallo WPF Freunde!&lt;br /&gt;&lt;br /&gt;In letzter Zeit verwende ich immer mehr WPF in meinen Anwendungen. Ganz auf WinForms möchte ich aber nicht versichten. Aus Gewohnheit nehme ich für einen neues VisualStudio Projekt die Projektvorlage "WinForms Anwendung". Wenn ich nun versuche ein WPF-UserControl zu meinem Projekt hinzufüge erscheint beim Kompilieren diese Fehlermeldung:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Der Name "InitializeComponent" wurde nicht deklariert&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Mir kamen sofort einige Fragen in den Sinn:&lt;br /&gt;-Habe ich .NET 3.0 richtig installiert?&lt;br /&gt;- Habe ich die .NET 3.0 Extensions für VisualStuido richtig installiert?&lt;br /&gt;- Ist meine XAML Datei in Ordnung?&lt;br /&gt;- Macht ExpressionBlend die Probleme (damit designe ich die UserControls)?&lt;br /&gt;&lt;br /&gt;Die Lösung ist dann doch relativ einfach.&lt;br /&gt;Man muss die Projektdatei *.proj öffnen und dem BuildSystem von VisualStuido MSBuild mitteilen wie es XAML und Code-Behind Dateien zu kompilieren hat.&lt;br /&gt;&lt;br /&gt;Diese Zeile muss man einfügen:&lt;br /&gt;&lt;br /&gt; &amp;ltimport project="$(MSBuildBinPath)\Microsoft.WinFX.targets"&amp;gt&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;/em&gt;&lt;br /&gt;Klar, dass die normale .NET 2.0 WinForms Anwendung Projektvorlage noch nichts von XAML und WPF gehört hat und dementsprechend die Dateien nicht richtig kompilieren kann.&lt;br /&gt;&lt;br /&gt;Benjamin Gopp&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1363207308265120314-8047599374232455406?l=hiq-software.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiq-software.blogspot.com/feeds/8047599374232455406/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1363207308265120314&amp;postID=8047599374232455406' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/8047599374232455406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/8047599374232455406'/><link rel='alternate' type='text/html' href='http://hiq-software.blogspot.com/2007/09/der-name-initializecomponent-wurde.html' title='Der Name &quot;InitializeComponent&quot; wurde nicht deklariert'/><author><name>HiQ-Software</name><uri>http://www.blogger.com/profile/17952163358850374510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1363207308265120314.post-4059596206900481635</id><published>2007-08-05T09:18:00.000+01:00</published><updated>2007-08-05T09:26:10.946+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='LINQ'/><title type='text'>LINQ wird missverstanden!</title><content type='html'>In der Ausgabe 9 des dotnet magazins ( &lt;a href="http://www.dotnet-magazin.de/"&gt;http://www.dotnet-magazin.de&lt;/a&gt; ) sind in der OpenStage Kolumne meine Gedanken zu LINQ abgedruckt. Nachdem der Artikel nun erschienen wird er auch hier "abgeblogged".&lt;br /&gt;&lt;br /&gt;Mittlerweile habe ich schon dutzende Artikel und Vorträge zu LINQ gehört. Und immer wieder sehe am Inhalt der Vorträge und den Reaktionen, dass LINQ missverstanden wird. Auch die Innovatoren von LINQ tragen nicht gerade zur Klarheit bei. Ein typisches (schlechtes) LINQ-Beispiel ist:&lt;br /&gt;From c in Customer Where c.City == “London“ Select c&lt;br /&gt;Dieses Beispiel suggeriert, dass man es hier mit SQL zu tun hat. Zugegeben etwas verdrehtes SQL, das From steht vorne und das Select hinten, aber es sieht nach SQL aus. Die Assoziation die dabei unweigerlich beim Programmierer entsteht ist Folgende: Linq … SQL … Datenbank;  Ah! Linq ist für Datenbanken bestimmt. Die ganze Power von LINQ verpufft in diesem Moment, wo LINQ mit SQL gleich gesetzt wird und auf die Verwendung von Datenbanken reduziert wird.&lt;br /&gt;Liege ich mit meiner Einschätzung so falsch? Ein Blick in das LINQ MSDN-Forum zeigt, dass über 90% der Fragen auf die Verwendung von LINQ in Verbindung mit Datenbanken abzielen. Da wird von LINQ sogar als O/R Mapper gesprochen.&lt;br /&gt;Auch die LINQ Queryoperatoren tragen nicht gerade dazu bei, dass man sich von SQL unterscheiden will. From, Select, Where - diese kennen wir alle von SQL. Was LINQ gerade auszeichnet, ist aber dass man alle Datenquellen befragen kann, also auch Objekte und XML etc.. Was vorher nur auf Datenbanken beschränkt gewesen ist, ist nun für andere Datenquellen möglich. Das ist das Revolutionäre an LINQ! Ein einheitliches Konzept um Daten abzufragen!&lt;br /&gt;Natürlich muss auch ein einheitliches API für LINQ gefunden werden. Es kann schlecht sein, dass man um Datenbanken abzufragen eine andere Syntax verwenden muss, als für XML oder Objekte. Das hatten wir nämlich bisher:  SQL für Datenbanken, XPath für XML und diverse Methoden für Arrays. Damit soll nun Schluss sein. Warum gerade aber LINQ so nah an SQL angelehnt ist, kann ich nicht verstehen. Vielleicht will man damit LINQ schneller etablieren. Langfristig gesehen wird man sich damit aber Probleme einhandeln. Wir können erwarten, dass mit der Zeit LINQ Implementationen für exotischere Datenquellen, auftauchen werden. Dann mag eine SQLnahe Syntax nicht mehr passend sein! Und dann sind wir bei dem Punkt angelangt, was LINQ eigentlich vermeiden wollte, nämlich fester Bestandteil einer Programmiersprache zu werden. Denn Programmiersprachen leben länger als APIs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1363207308265120314-4059596206900481635?l=hiq-software.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiq-software.blogspot.com/feeds/4059596206900481635/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1363207308265120314&amp;postID=4059596206900481635' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/4059596206900481635'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/4059596206900481635'/><link rel='alternate' type='text/html' href='http://hiq-software.blogspot.com/2007/08/linq-wird-missverstanden.html' title='LINQ wird missverstanden!'/><author><name>HiQ-Software</name><uri>http://www.blogger.com/profile/17952163358850374510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1363207308265120314.post-1660431528409536597</id><published>2007-07-28T20:53:00.000+01:00</published><updated>2007-07-28T21:24:37.783+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Basic'/><category scheme='http://www.blogger.com/atom/ns#' term='Orcas'/><title type='text'>My Extensions in VS2008</title><content type='html'>Nach einem Tag downloaden und Installation, habe ich nun endlich die Beta2 von Visual Studio 2008 "Orcas" auf meinem Rechner.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Aufgefallen ist mir der neue Projekttab "My Extensions"&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_c4ehIbstBAc/RquhK0k-TjI/AAAAAAAAAAs/EBY5T8QuKqc/s1600-h/MyExtensions.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5092341010956963378" style="CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_c4ehIbstBAc/RquhK0k-TjI/AAAAAAAAAAs/EBY5T8QuKqc/s400/MyExtensions.JPG" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Sollte es damit einfacher möglich sein neue Erweiterungen für den My Namespace zu erstellen?&lt;br /&gt;&lt;br /&gt;Der Link "Learn more about customizung the My Namespace" war leider tot. Auch nachdem ich die 2Gig große VS2008MSDN runtergeladen und installiert hatte.&lt;br /&gt;&lt;br /&gt;Gefunden habe ich dann doch noch, wonach ich gesucht hatte. Und zwar die Quelldatei für die WPF My Extensions, die bereits in Orcas auszuwählen sind. Diese befindet sich unter dem Ordner "My Project" in dem Ordner "MyExtensions". Dort wird man dann auch in Zukunft eigene Extensions für den My Namespace ablegen können.&lt;br /&gt;&lt;br /&gt;Bleibt nach wie vor die Frage: Woher weiß VisualStudio, dass eine "My Extension" vorhanden ist? Ich habe weder eine Assembly noch ein Item-Template gefunden, dass die Vorlage für die "WPF My Extension" liefert. (Eine entsprechende Frage wie man denn diese My Extensions verwendet habe ich gleich nach der Entdeckung in das MSDN Forum gestellt. Mal gucken ob in nächster Zeit eine Anwort darauf zu finden ist.)&lt;br /&gt;&lt;br /&gt;Demnächst erscheint ein Artikel von mir im dotnet.magazin über das Erstellen eines eigenen My Namespaces. Der &lt;em&gt;My.Data&lt;/em&gt; Namespace bietet einfachen Zugriff auf eine im Vorhandene Datenbank. Der Artikel ist deswegen nur noch nicht fertig, weil das Deployment von My Extensions Probleme macht. Die Erweiterungen bestehen nämlich aus generiertem Code, der von den Projekteinstellungen abhängt, und kann deswegen nicht als Assembly verteilt werden. Es bleibt also nur noch ein Item-Template übrig für ein simples Deployment. Wenn man eine Vollintegration haben will, muss man wohl oder übel ein eigenes Add-In für Visual Studio schreiben. Das finde ich aber zu Aufwendig.&lt;br /&gt;&lt;br /&gt;Auf der Basta 2007 Spring hatt ich mit Jay Schmelzer (Principal Program Manager Visual Basic) meine My.Data Erweiterung vorgestellt und mit ihm darüber gesprochen, wie man eigene My Erweiterungen in Visual Studio integrieren kann. Er versprach dies für Orcas mit einzuplanen.&lt;br /&gt;&lt;br /&gt;Schade Jay, das war eigentlich nicht das, was ich mir vorgestellt hatte!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;#If _MyType &lt;&gt; "Empty" Then&lt;br /&gt;Namespace My&lt;br /&gt;''' &lt;summary&gt;&lt;br /&gt;''' Module used to define the properties that are available in the My Namespace for WPF&lt;br /&gt;''' &lt;/summary&gt;&lt;br /&gt;''' &lt;remarks&gt;&lt;/remarks&gt;&lt;br /&gt;&lt;global.microsoft.visualbasic.hidemodulename()&gt; _&lt;br /&gt;Module MyWpfExtension&lt;br /&gt;Private m_Computer As New ThreadSafeObjectProvider(Of Global.Microsoft.VisualBasic.Devices.Computer)&lt;br /&gt;Private m_User As New ThreadSafeObjectProvider(Of Global.Microsoft.VisualBasic.ApplicationServices.User)&lt;br /&gt;Private m_Windows As New ThreadSafeObjectProvider(Of MyWindows)&lt;br /&gt;Private m_Log As New ThreadSafeObjectProvider(Of Global.Microsoft.VisualBasic.Logging.Log)&lt;br /&gt;''' &lt;summary&gt;&lt;br /&gt;''' Returns the application object for the running application&lt;br /&gt;''' &lt;/summary&gt;&lt;br /&gt;Friend ReadOnly Property Application() As Global.System.Windows.Application&lt;br /&gt;Get&lt;br /&gt;Return Global.System.Windows.Application.Current&lt;br /&gt;End Get&lt;br /&gt;End Property&lt;br /&gt;''' &lt;summary&gt;&lt;br /&gt;''' Returns information about the host computer.&lt;br /&gt;''' &lt;/summary&gt;&lt;br /&gt;Friend ReadOnly Property Computer() As Global.Microsoft.VisualBasic.Devices.Computer&lt;br /&gt;Get&lt;br /&gt;Return m_Computer.GetInstance()&lt;br /&gt;End Get&lt;br /&gt;End Property&lt;br /&gt;''' &lt;summary&gt;&lt;br /&gt;''' Returns information for the current user. If you wish to run the application with the current&lt;br /&gt;''' Windows user credentials, call My.User.InitializeWithWindowsUser().&lt;br /&gt;''' &lt;/summary&gt;&lt;br /&gt;Friend ReadOnly Property User() As Global.Microsoft.VisualBasic.ApplicationServices.User&lt;br /&gt;Get&lt;br /&gt;Return m_User.GetInstance()&lt;br /&gt;End Get&lt;br /&gt;End Property&lt;br /&gt;''' &lt;summary&gt;&lt;br /&gt;''' Returns the application log. The listeners can be configured by the application's configuration file.&lt;br /&gt;''' &lt;/summary&gt;&lt;br /&gt;Friend ReadOnly Property Log() As Global.Microsoft.VisualBasic.Logging.Log&lt;br /&gt;Get&lt;br /&gt;Return m_Log.GetInstance()&lt;br /&gt;End Get&lt;br /&gt;End Property&lt;br /&gt;''' &lt;summary&gt;&lt;br /&gt;''' Returns the collection of Windows defined in the project.&lt;br /&gt;''' &lt;/summary&gt;&lt;br /&gt;Friend ReadOnly Property Windows() As MyWindows&lt;br /&gt;&lt;global.system.diagnostics.debuggerhidden()&gt; _&lt;br /&gt;Get&lt;br /&gt;Return m_Windows.GetInstance()&lt;br /&gt;End Get&lt;br /&gt;End Property&lt;br /&gt;&lt;global.system.componentmodel.editorbrowsableattribute(global.system.componentmodel.editorbrowsablestate.never)&gt; _&lt;br /&gt;&lt;global.microsoft.visualbasic.mygroupcollection("system.windows.window",&gt; _&lt;br /&gt;Friend NotInheritable Class MyWindows&lt;br /&gt;&lt;global.system.diagnostics.debuggerhidden()&gt; _&lt;br /&gt;Private Shared Function Create__Instance__(Of T As {New, Global.System.Windows.Window})(ByVal Instance As T) As T&lt;br /&gt;If Instance Is Nothing Then&lt;br /&gt;If m_WindowBeingCreated IsNot Nothing Then&lt;br /&gt;If m_WindowBeingCreated.ContainsKey(GetType(T)) = True Then&lt;br /&gt;Throw New Global.System.InvalidOperationException("The window cannot be accessed via My.Windows from the Window constructor.")&lt;br /&gt;End If&lt;br /&gt;Else&lt;br /&gt;m_WindowBeingCreated = New Global.System.Collections.Hashtable()&lt;br /&gt;End If&lt;br /&gt;m_WindowBeingCreated.Add(GetType(T), Nothing)&lt;br /&gt;Return New T()&lt;br /&gt;m_WindowBeingCreated.Remove(GetType(T))&lt;br /&gt;Else&lt;br /&gt;Return Instance&lt;br /&gt;End If&lt;br /&gt;End Function&lt;br /&gt;&lt;global.system.diagnostics.debuggerhidden()&gt; _&lt;br /&gt;Private Sub Dispose__Instance__(Of T As Global.System.Windows.Window)(ByRef instance As T)&lt;br /&gt;instance = Nothing&lt;br /&gt;End Sub&lt;br /&gt;&lt;global.system.diagnostics.debuggerhidden()&gt; _&lt;br /&gt;&lt;global.system.componentmodel.editorbrowsableattribute(global.system.componentmodel.editorbrowsablestate.never)&gt; _&lt;br /&gt;Public Sub New()&lt;br /&gt;MyBase.New()&lt;br /&gt;End Sub&lt;br /&gt;&lt;global.system.threadstatic()&gt; Private Shared m_WindowBeingCreated As Global.System.Collections.Hashtable&lt;br /&gt;&lt;global.system.componentmodel.editorbrowsable(global.system.componentmodel.editorbrowsablestate.never)&gt; Public Overrides Function Equals(ByVal o As Object) As Boolean&lt;br /&gt;Return MyBase.Equals(o)&lt;br /&gt;End Function&lt;br /&gt;&lt;global.system.componentmodel.editorbrowsable(global.system.componentmodel.editorbrowsablestate.never)&gt; Public Overrides Function GetHashCode() As Integer&lt;br /&gt;Return MyBase.GetHashCode&lt;br /&gt;End Function&lt;br /&gt;&lt;global.system.componentmodel.editorbrowsable(global.system.componentmodel.editorbrowsablestate.never)&gt; _&lt;br /&gt;Friend Overloads Function [GetType]() As Global.System.Type&lt;br /&gt;Return GetType(MyWindows)&lt;br /&gt;End Function&lt;br /&gt;&lt;global.system.componentmodel.editorbrowsable(global.system.componentmodel.editorbrowsablestate.never)&gt; Public Overrides Function ToString() As String&lt;br /&gt;Return MyBase.ToString&lt;br /&gt;End Function&lt;br /&gt;End Class&lt;br /&gt;End Module&lt;br /&gt;End Namespace&lt;br /&gt;#End If&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1363207308265120314-1660431528409536597?l=hiq-software.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiq-software.blogspot.com/feeds/1660431528409536597/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1363207308265120314&amp;postID=1660431528409536597' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/1660431528409536597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/1660431528409536597'/><link rel='alternate' type='text/html' href='http://hiq-software.blogspot.com/2007/07/my-extensions-in-vs2008.html' title='My Extensions in VS2008'/><author><name>HiQ-Software</name><uri>http://www.blogger.com/profile/17952163358850374510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_c4ehIbstBAc/RquhK0k-TjI/AAAAAAAAAAs/EBY5T8QuKqc/s72-c/MyExtensions.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1363207308265120314.post-8105418996880789165</id><published>2007-07-16T12:47:00.000+01:00</published><updated>2007-07-16T12:59:44.261+01:00</updated><title type='text'>Wie kann ich Controls in einer Form zentrieren?</title><content type='html'>Ich habe eine sehr einfache Methode herausgefunden um ein beliebiges Steuerelement in einer Form zu zentrieren; also genau mittig anzuzeigen. Wenn die Form verschoben wird, soll natürlich auch die Position des Controls wieder an die neue Mitte verschoben werden.&lt;br /&gt;&lt;br /&gt;Meine Lösung erfordert keinen Code!&lt;br /&gt;&lt;br /&gt;Man nehme ein &lt;em&gt;TableLayoutPanel&lt;/em&gt; und stellt seine &lt;em&gt;Dock&lt;/em&gt; Eigenschaft auf &lt;em&gt;Dock.Fill&lt;/em&gt;. Nun füllt das Panel die ganze Form aus. Dann reduziert man das Panel auf genau 1 Zelle, d.h. &lt;em&gt;RowCount&lt;/em&gt; und &lt;em&gt;ColumnCount&lt;/em&gt; = 1. Auchtung eine Zelle kann immer nur 1 Control beinhalten. Wer daher mehere Elemente mittig anzeigen lassen will muss ein weiteres Panel verwenden in das er diese Elemente einfügt. Das Control wird nun auf &lt;em&gt;Anchor = Anchor.None&lt;/em&gt; gesetzt. Siehe da das Control befindet sich nun immer in der Mitte!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_c4ehIbstBAc/Rptb_CcVBoI/AAAAAAAAAAk/kzgdoADSE1g/s1600-h/Form1.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5087761342590682754" style="CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_c4ehIbstBAc/Rptb_CcVBoI/AAAAAAAAAAk/kzgdoADSE1g/s400/Form1.jpg" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1363207308265120314-8105418996880789165?l=hiq-software.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiq-software.blogspot.com/feeds/8105418996880789165/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1363207308265120314&amp;postID=8105418996880789165' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/8105418996880789165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/8105418996880789165'/><link rel='alternate' type='text/html' href='http://hiq-software.blogspot.com/2007/07/wie-kann-ich-controls-in-einer-form.html' title='Wie kann ich Controls in einer Form zentrieren?'/><author><name>HiQ-Software</name><uri>http://www.blogger.com/profile/17952163358850374510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_c4ehIbstBAc/Rptb_CcVBoI/AAAAAAAAAAk/kzgdoADSE1g/s72-c/Form1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1363207308265120314.post-2573384906251867651</id><published>2007-07-13T13:55:00.000+01:00</published><updated>2007-07-13T14:12:26.976+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Orcas'/><category scheme='http://www.blogger.com/atom/ns#' term='LINQ'/><title type='text'>Achtung! .NET 3.5 Beta1 und .NET 3.5 June CTP inkompatibel!</title><content type='html'>Achtung bei dem Ausprobieren von Programmen, die unter Orcas erstellt worden sind. Orcas installiert standardmäßig das .NET Framework 3.5 Beta1 vom April 2007. Wer sich bereits die neue Juni CTP runtergeladen hat, wird Programme die LINQ verwenden nicht ausführen können. Es erscheint folgende Fehlermeldung:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Der Typ System.Linq.Func`2 in der Assembly System.Core, Version 2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561924e089 konnte nicht geladen werden.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;LINQ macht excessiven Gebrauch vom generischen Delegate &lt;em&gt;Func&lt;&gt;. &lt;/em&gt;Dieser wurde nun in einen anderen Namespace verfrachtet. Statt bisher im Namespace &lt;em&gt;System.Linq&lt;/em&gt; ist &lt;em&gt;Func&lt;&gt;&lt;/em&gt; im Namespace &lt;em&gt;System&lt;/em&gt; zu finden. Er ist somit überall verfügbar, ohne dass man einen bestimmten Namespace einbinden muss. Denn im Namespace System befinden sich alle Grundlegenden Datentypen.&lt;br /&gt;&lt;br /&gt;Hinzugekommen sind nun auch diverse Überladungen des Action-Delegate. Es ist nämlich bisher nicht möglich einen Delegate &lt;em&gt;Func&lt;t,void&gt;&lt;/em&gt; zu erstellen. Jedoch kann man einen normalen Delegate &lt;em&gt;delegate void Action&lt;t&gt;(T obj)&lt;/em&gt; erstellen.&lt;br /&gt;&lt;br /&gt;Hier nochmal die vorgefertigten Delegates in der Übersicht:&lt;br /&gt;&lt;br /&gt;TReturn Func&lt;treturn&gt;&lt;br /&gt;TReturn Func&lt;t1,treturn&gt;&lt;br /&gt;TReturn Func&lt;t1,t2,treturn&gt;&lt;br /&gt;TReturn Func&lt;t1,t2,t3treturn&gt;&lt;br /&gt;TReturn Func&lt;t1,t2,t3,t4,treturn&gt;&lt;br /&gt;&lt;br /&gt;void Action&lt;t1&gt;&lt;br /&gt;void Action&lt;t1,t2&gt;&lt;br /&gt;void Action&lt;t1,t2,t3&gt;&lt;br /&gt;void Action&lt;t1,t2,t3,t4,&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1363207308265120314-2573384906251867651?l=hiq-software.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiq-software.blogspot.com/feeds/2573384906251867651/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1363207308265120314&amp;postID=2573384906251867651' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/2573384906251867651'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/2573384906251867651'/><link rel='alternate' type='text/html' href='http://hiq-software.blogspot.com/2007/07/achtung-net-35-beta1-und-net-35-june.html' title='Achtung! .NET 3.5 Beta1 und .NET 3.5 June CTP inkompatibel!'/><author><name>HiQ-Software</name><uri>http://www.blogger.com/profile/17952163358850374510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1363207308265120314.post-8741177191277828064</id><published>2007-07-09T11:45:00.000+01:00</published><updated>2007-07-09T12:14:09.288+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><title type='text'>WPF: Wie erstelle ich einen autoskalierenden Text?</title><content type='html'>Es hat lange gebraucht bis ich mich an WPF (Windows Presentation Foundation) rangewagt habe. Ich erkenne aber immer mehr die Vorzüge von WPF. Z.B. erstelle ich gerade für eine Anwendung einen animierten Splash-Screen bzw. Intro. Das gibt natürlich wesentlich mehr her als ein statisches Bitmap auf dem das Anwendungslogo zu sehen ist. Ich brauche nicht zu erwähnen, dass dies mit GDI+ echt aufwändig wäre und lange nicht so gut aussehen würde wie mit WPF.&lt;br /&gt;&lt;br /&gt;Der Splash-Screen soll natürlich voll Vektrobasiert sein, d.h. alle Grafiken, Text und Animationen, sollen sich der Größe des Fensters anpassen. Doch wie schaffe ich es, dass die Schriftgröße eines Textes in einer TextBox automatisch skaliert wird? Ich habe lange gesucht, und keine passende "einfache" Einstellung gefunden, wie z.B. TextBox.Strech = Fill; Hieran sieht man, dass WPF noch nicht ganz ausgereift ist. Es sind zwar viele Grundelemente vorhanden, die man zu anderen komplexen Elementen zusammenstellen kann, aber das muss man halt selber machen. Zudem braucht man eine Menge Wissen über WPF, was man am Anfang natürlich nicht hat. Wenn man also eine DataGridView in WPF braucht, wird man nicht direkt rangehen können, um sich eine eigene DataGridView zu bauchen; auch wenn die dafür erforderlichen Grundelemente vorhanden sind. 1. Braucht man viel Efahrung mit WPF und 2. kostet es enorm viel Zeit.&lt;br /&gt;&lt;br /&gt;Aber zurück zu unserem skalierbaren Text.&lt;br /&gt;&lt;br /&gt;Wir benötigen zunächst das Tool &lt;em&gt;ExpressionBlend&lt;/em&gt;. Meine Lösung kann nicht programmiert werden, sondern benötigt ein Feature von &lt;em&gt;ExpressionBlen&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;1. Wir nehmen einen &lt;em&gt;&lt;span style="color:#000099;"&gt;TextBlock&lt;/span&gt;&lt;/em&gt;. (&lt;strong&gt;Achtung &lt;/strong&gt;keine normale &lt;em&gt;TextBox&lt;/em&gt;!)&lt;br /&gt;2. Wir schreiben einen Text in unseren TextBlock. Es können auch andere Elemente wie Elipsen, Controls etc. zwischen dem Text stehen. Das ist mit einem TextBlock möglich. Dann die Schriftart und andere Einstellungen setzen.&lt;br /&gt;3. Wir konvertiere nun den &lt;em&gt;&lt;span style="color:#000099;"&gt;TextBlock&lt;/span&gt;&lt;/em&gt; in einen &lt;em&gt;&lt;span style="color:#000099;"&gt;Path&lt;/span&gt;&lt;/em&gt;. &lt;em&gt;Menü-&gt;Objekt-&gt;Pfad-&gt;in Pfad konvertieren.&lt;/em&gt; Alle Elemente des TextBlock auch der Text wird in einen Pfad konvertiert. Dieser Pfad besteht aus relativen Punkten die Vektororientiert sind und somit voll skalierbar.&lt;br /&gt;4. Wir umgeben den Pfad mit einer &lt;em&gt;&lt;span style="color:#000099;"&gt;ViewBox&lt;/span&gt;&lt;/em&gt;. Diese ViewBox kann automatisch ihre Childelemente skalieren.&lt;br /&gt;5. Tada! Fertig ist unser automatisch skalierender Text&lt;br /&gt;&lt;br /&gt;Nachteil: wenn man den Text ändern will muss man die Schritte erneut durchführen ;-(&lt;br /&gt;&lt;br /&gt;Es wäre natürlich auch denkbar eine Skalierung in Abhängigkeit der Fenstergröße per Databinding zu ermöglichen. Hierzu müsste man aber entsprechende Berechnungen anstellen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1363207308265120314-8741177191277828064?l=hiq-software.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiq-software.blogspot.com/feeds/8741177191277828064/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1363207308265120314&amp;postID=8741177191277828064' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/8741177191277828064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/8741177191277828064'/><link rel='alternate' type='text/html' href='http://hiq-software.blogspot.com/2007/07/wpf-wie-erstelle-ich-einen.html' title='WPF: Wie erstelle ich einen autoskalierenden Text?'/><author><name>HiQ-Software</name><uri>http://www.blogger.com/profile/17952163358850374510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1363207308265120314.post-1217727092149582666</id><published>2007-06-27T19:10:00.000+01:00</published><updated>2007-06-27T20:05:26.647+01:00</updated><title type='text'>Was gibt's Neues in VisualBasic 2008?</title><content type='html'>Ich probiere seit einiger Zeit die neue VisualStudio Version Orcas bzw. VS2008 in der Beta1 aus. Was mich natürlich besonders daran interessiert, sind die neuen VB Features. Nach langem Suchen musste ich feststellen, dass bestimmte Funktionen noch nicht in Orcas Beta 1 zu finden sind. Das betrifft z.B. Lambda Funktionen - also inline Funktionen. Während ich in C# eine lambda-funktion so schreiben kann x =&gt; x+1 (Eine Funktion mit dem Parameter x der x + 1 zurückgibt) sollte man in VB dies schreiben können Function(x) x+1. Anscheinend kann dies der Beta Compiler noch nicht. Was blieb mir anderes übrig als mit LINQ in C# weiter zu experimentieren. (Ich muss sagen, langsam gefällt mir C#.)&lt;br /&gt;&lt;br /&gt;Werden solche kleinen Probleme in der endgültigen Version von VB 2008 behoben sein?&lt;br /&gt;&lt;br /&gt;Ja, die gröbsten Sachen werden wohl in VB laufen, aber man wird keine großen Sprünge machen können. Es sieht so aus als würde C# 3.0 einen Produktivitätsgewinn gegenüber VB 9.0 haben. Was besonders ironisch ist C# wird dynamischer sein als VB. (Das wird aber mit VBx sicherlich wieder aufgeholt werden) Warum?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;Keine Collection Initializer in VB!&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;Während C# so ziemlich jeden Typ ableiten kann, kann dies VB anscheinend nicht.&lt;br /&gt;Im &lt;strong&gt;C#&lt;/strong&gt; kann ich einenen anonymen Typen definieren:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;var obj = new { Property1 = "Hallo", Property2 = 12345};&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;strong&gt;VB&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Dim obj = New With { Property1 = "Hallo", Property2 = 12345}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Was ist wenn ich ein Array erstellen will?&lt;br /&gt;&lt;strong&gt;C#&lt;/strong&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;var list = new[] {1,2,3};&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;&lt;strong&gt;VB&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;Dim list = New Integer() {1,2,3}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;Ärgerlich ist hier, dass ich bei VB den Datentyp des Arrays angeben muss. Warum kann dieser nicht abgeleitet werden wie bei C#?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Mit C# kann man auch Auflistungen erstellen, die vom Compiler abgeleitet werden können.&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;var list = new[] &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   new {Property1 = "hallo"};&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   new {Property1 = "test"};&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;};&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;br /&gt;Sowohl der Anonyme Typ als auch die Anonyme Collection können abgeleitet werden. Man kann also einen ObjektInitializier (also {Property=Value}) auch verschachteln und damit Collections bauen.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://oakleafblog.blogspot.com/2007/06/will-visual-basic-90-have-collection.html"&gt;http://oakleafblog.blogspot.com/2007/06/will-visual-basic-90-have-collection.html&lt;/a&gt; sagt, dass auf mysteriöse Weise in den neusten HandsOnLabs zu VB 9 alle Verweise auf Collection Initializer verschwunden sind. Noch schlimmer: Keins der angeführten Beispiele soll funktionieren. Wie man also in Zukunft dieses C# Beispiel in VB umsetzten wird, ist also noch unklar.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;Was gibt es sonst Neues? &lt;/strong&gt;&lt;a href="http://www.panopticoncentral.net/archive/2007/06/27/21113.aspx"&gt;&lt;span style="font-size:78%;"&gt;http://www.panopticoncentral.net/archive/2007/06/27/21113.aspx&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Das &lt;span style="color:#000099;"&gt;InternalsVisibleToAttribute&lt;/span&gt; wird endlich vom VB Compiler erkannt. Damit ist es möglich, dass man die mit Friend gekennzeichneten Klassen und Member aus einer anderen Assembly aufrufen kann. Dies ist für UnitTests wichtig! Zwar konnte man bisher schon dieses Attribut in VB verwenden, aber die entsprechenden Friend Klassen wurden nicht angezeigt.&lt;/li&gt;&lt;li&gt;&lt;span style="color:#000099;"&gt;Relaxed Delegates&lt;/span&gt;. Hat man z.B. einen Click EventHandler für einen Button und man möchte dieses Ereignis verarbeiten, musste man immer die entsprechende Signatur des EventHandler Delegates als Verarbeitungsmethode schreiben. In der Regel also Button1_click(sender as Object, e as EventArgs). Das war lästig, da weder sender noch e benutzt wurden (Es sei den EventArgs hatte wirklich wichtige Argumente). Es wird aber nicht das sog. &lt;em&gt;Currying&lt;/em&gt; unterstützt, d.h. dass man auch nur einen Parameter verwenden kann, statt alle Parameter wegzulassen.&lt;/li&gt;&lt;li&gt;VB Programme können auch &lt;span style="color:#333399;"&gt;ohne Microsoft.VisualBasic.dll&lt;/span&gt; kompiliert werden. Der VB Compiler hat bisher für bestimmte late-binding Funktionen von VB dieses Dll benötigt. &lt;/li&gt;&lt;li&gt;Es können Objektmember auf Interfaces aufgerufen werden. Es gibt zwar keine Beispiele hierzu, aber ich stell mir das als &lt;span style="color:#000099;"&gt;Extrem LateBinding&lt;/span&gt; vor. Beispiel:&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;Interface ITest&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;   Sub CallFunktion&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;End Interface&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;Class Person Implements ITest&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;   Property Name&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;End Class&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;Dim p as ITest = New Person&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;p.Name&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Ich könnte ein Objekt zu einem Interface casten und dann auf diesem Interface ein Member des Objekts aufrufen, obwohl die Variable ja jetzt ein Interface ist. (Wofür soll das gut sein???)&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Es wird einen ? Operator wie in C# geben, um If Else Condition in Kurzform schreiben zu können. (Was für ein Blödsinn!)&lt;/li&gt;&lt;/ul&gt;&lt;em&gt;&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;Was wird nicht umgesetzt?&lt;/strong&gt;&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;Erlaubt es C#, dass in Labdas auch Statements wie -  Console.WriteLine(x) - möglich sind, werden in VB nur Expressions erlaubt sein - also x+1. Dadurch wird VB um echte Funktionalität für LINQ beschnitten. Auch einen yield Operator wird es in VB nicht geben. Dadurch wird VB Programmierern die Möglichkeit genommen, wirklich produktiv und kreativ mit LINQ zu arbeiten. (Shame on you Microsoft!)&lt;br /&gt;&lt;em&gt;&lt;/em&gt;&lt;br /&gt;Insgesamt bin ich schon sehr enttäusch von den neuen VB Features! Echt schwache Leistung Microsoft. Ich werde wohl für den Einsatz von LINQ C# einsetzten &lt;strong&gt;MÜSSEN&lt;/strong&gt;, obwohl ich lieber VB verwenden würde!&lt;br /&gt;&lt;em&gt;&lt;span style="font-family:Courier New;"&gt;&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="font-size:130%;"&gt;&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="font-size:130%;"&gt;&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="font-size:130%;"&gt;&lt;/span&gt;&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1363207308265120314-1217727092149582666?l=hiq-software.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiq-software.blogspot.com/feeds/1217727092149582666/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1363207308265120314&amp;postID=1217727092149582666' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/1217727092149582666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/1217727092149582666'/><link rel='alternate' type='text/html' href='http://hiq-software.blogspot.com/2007/06/was-gibts-neues-in-visualbasic-2008.html' title='Was gibt&apos;s Neues in VisualBasic 2008?'/><author><name>HiQ-Software</name><uri>http://www.blogger.com/profile/17952163358850374510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1363207308265120314.post-4322970925070704290</id><published>2007-06-22T12:24:00.000+01:00</published><updated>2007-06-22T12:58:25.438+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Konferenzen'/><title type='text'>Meine erste BASTA! als Speaker</title><content type='html'>Ich war etwas spät dran mit der Einreichung meiner Vorträge. Es hat aber doch noch geklappt:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;Ich bin bei der BASTA! als Speaker dabei!!!&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://www.basta.net/speaker_de.asp"&gt;&lt;br /&gt;&lt;/a&gt;Ursprünglich waren 3 Sessions vorgesehen. Das Programm war jedoch schon sehr vollgepackt, so dass ich nur 2 Sessions halten kann. Beide wahrscheinlich am Donnerstag 21.07.2007.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.basta.net/speaker_de.asp"&gt;&lt;/a&gt;&lt;em&gt;&lt;span style="font-size:130%;"&gt;Meine Sessions:&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;span style="font-size:130%;"&gt;&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;SmartClients mit CAB, SCSF und "Acropolis"&lt;/span&gt;&lt;br /&gt;Der Composite UI Application Block (CAB) der patterns &amp;amp; practice Group von Mirosoft ermöglicht den Bau von komplexen, lose gekoppelten und modularen Smart Clients. CAB stellt eine Infrastruktur für Architekturmuster wie MVP/MVC, Commands und Dependency Injection zur Verfügung. UseCases, Views und Services werden in Module verpackt, die je nach Anwendungsfall oder Berechtigung in eine Shell geladen werden. Bei der Entwicklung von Applikationen mit CAB werden Sie von der Smart Client Software Factory (SCSF) unterstützt. Erfahren Sie außerdem, wie in Zukunft Smart Clients für die WPF mit dem Framework "Acropolis" aussehen werden.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Visual Studio 2005 erweitern: Ohne Add-ins!&lt;/span&gt;&lt;br /&gt;Auch ohne ein kompliziertes Add-in schreiben zu müssen, lässt sich VS 2005 erweitern. Wie? Kommen Sie in meine Session und erfahren Sie, wie Code Snippets für Visual Studio funktionieren und wie einfach diese erstellt werden können. Lernen Sie, wie sich lästiges Tippen von immer wiederkehrendem Code durch eigene Projekt- und Item-Templates ersparen lässt. Schließlich gebe ich eine Einführung in das Guidance Automation Toolkit (GAT). Mit GAT haben Sie ein mächtiges Werkzeug durch das Sie eigene Software Factories erstellen können.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Dank dem Rhetoriktraining vom &lt;a href="http://www.prodevcollege.de/produkte-sprechertraining.html"&gt;Professional Developer College&lt;/a&gt; mit Ralf Westphal und Renate Klein, sehe ich mich der Aufgabe 100% gewachsen.&lt;br /&gt;&lt;br /&gt;Wir sehen uns auf der BASTA! in Mainz&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1363207308265120314-4322970925070704290?l=hiq-software.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiq-software.blogspot.com/feeds/4322970925070704290/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1363207308265120314&amp;postID=4322970925070704290' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/4322970925070704290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/4322970925070704290'/><link rel='alternate' type='text/html' href='http://hiq-software.blogspot.com/2007/06/meine-erste-basta-als-speaker.html' title='Meine erste BASTA! als Speaker'/><author><name>HiQ-Software</name><uri>http://www.blogger.com/profile/17952163358850374510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1363207308265120314.post-7877254123163453268</id><published>2007-06-22T11:49:00.000+01:00</published><updated>2007-06-22T12:21:29.526+01:00</updated><title type='text'>Aller Anfang ist schwer!</title><content type='html'>Hello World!&lt;br /&gt;&lt;br /&gt;Jetzt habe ich es endlich geschafft meinen ersten Blogeintrag zu schreiben.&lt;br /&gt;Lange habe ich überlegt, was ich eigentlich in einen Blog schreiben sollte!&lt;br /&gt;Ich habe nun beschlossen einfach drauf los zu schreiben.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Warum Blogs?&lt;/em&gt;&lt;br /&gt;Man könnte meinen Blogs haben keinerlei Nutzen. Nur wieder ein Haufen von Wichtigtuern, die das mit dem "Online-Tagebuch" missverstanden haben und tatsächlich ihr Tagebuch online stellen. 'Liebes Tagebuch, ich glaub ich bin verliebt...' oder Ähnliches.&lt;br /&gt;&lt;br /&gt;Blogs sind mir bei meiner Arbeit sehr nützlich! Früher habe ich alle 30 Minuten meinen InternetExplorer gestartet und alle meine News Seiten geöffnent, um zu sehen ob es was Neues gibt. Heute werden meine abonierten Feeds automatisch aktuallisiert. Ich kann mehr Informationen in weniger Zeit aufnehmen. Ich muss nämlich nicht erst groß auf einer Seite danach suchen was mich interessiert. Blogs verhelfen einem, "up to date" zu sein, ohne dass man mit Newslettern überschwämt wird.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Warum Bloggen?&lt;/em&gt;&lt;br /&gt;Konsumieren ist zwar schön, aber es ist auch schön was zurückzugeben. Ich merke wie ich durch Blogeinträge inspieriert werde. Es müssen nicht unbedingt ausformulierte Artikel sein. Nur einfache Gedanken die jemand in seinem Blog veröffentlicht hat. Sich gegenseitig intellektuell zu befruchten, finde ich sehr befriedigend.&lt;br /&gt;&lt;br /&gt;Benjamin Gopp&lt;br /&gt;HiQ-Software&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1363207308265120314-7877254123163453268?l=hiq-software.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://hiq-software.blogspot.com/feeds/7877254123163453268/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1363207308265120314&amp;postID=7877254123163453268' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/7877254123163453268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1363207308265120314/posts/default/7877254123163453268'/><link rel='alternate' type='text/html' href='http://hiq-software.blogspot.com/2007/06/aller-anfang-ist-schwer.html' title='Aller Anfang ist schwer!'/><author><name>HiQ-Software</name><uri>http://www.blogger.com/profile/17952163358850374510</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
