-
ACHTUNG - NEUES BLOG
Ab sofort steht unter http://devtyr.norberteder.com mein neues Blog zur Verfügung. Dieses Blog wird nicht weiter betreut, bleibt aber erhalten. Neue Eintr%auml;ge erfolgen nur mehr im neuen Blog. Kommentare werden ebenfalls nicht mehr behandelt. Wer weiterhin meinen Einträgen und Aktivitäten folgen möchte, möge bitte RSS-Feeds, Verlinkungen etc. an die neue Location anpassen.
|
Silverlight: Automatische Selektion einer TextBox bei Fokuserhalt
17.02.10 - .NET, WPF, Silverlight Beitrag von Norbert Eder| | Eine häufige Anforderung: Erhält eine TextBox den Fokus, soll der Inhalt ganzheitlich selektiert werden. Dafür gibt es keine eigene Eigenschaft, die verwendet werden könnte. Es gibt lediglich die Methoden Select (für die Auswahl eines bestimmten Bereichs) oder SelectAll für die Auswahl des gesamten Textes.
Die erste Idee wäre nun die Prüfung der Codebehind auf Änderungen des Fokuses inklusive Behandlung. Dies ist aber weder eine wiederverwendbare Lösung, noch ist sie sauber zu nennen.
Statt dessen bietet sich die Verwendung von Attached Properties an. Wir erstellen dazu eine eigene Klasse, welche eine Dependency Property und die entsprechenden Getter und Setter anbietet. Diese beschreiben, ob die vollständige Auswahl aktiviert ist oder nicht. Bei einer Änderung der Eigenschaft wird geprüft, welcher Wert gesetzt wurde. Wurde sie auf true gesetzt, wird das Ereignis GotFocus abonniert, andernfalls wird dieses Abonnement wieder gelöst. Im entsprechenden Ereignishandler wird nun das angedockte Element über den FocusManager bezogen und der vorhandene Text selektiert.
public class TextBoxSelector
{
public static readonly DependencyProperty SelectAllOnFocusProperty =
DependencyProperty.RegisterAttached(
"SelectAllOnFocus",
typeof(bool),
typeof(TextBoxSelector),
new PropertyMetadata(OnSelectAllOnFocusPropertyChanged));
private static void OnSelectAllOnFocusPropertyChanged(
DependencyObject sender,
DependencyPropertyChangedEventArgs e)
{
FrameworkElement element = sender as FrameworkElement;
if (element != null)
{
if ((bool)e.NewValue)
element.GotFocus += OnFocus;
else
element.GotFocus -= OnFocus;
}
}
public static bool GetSelectAllOnFocus(
DependencyObject o)
{
return (bool)o.GetValue(SelectAllOnFocusProperty);
}
public static void SetSelectAllOnFocus(
DependencyObject o,
bool selectAll)
{
o.SetValue(SelectAllOnFocusProperty, selectAll);
}
static void OnFocus(object sender, RoutedEventArgs e)
{
TextBox focusedTextBox =
FocusManager.GetFocusedElement() as TextBox;
if (focusedTextBox != null)
{
focusedTextBox.SelectAll();
}
}
}
Für die Verwendung ist die eben erstellte Klasse per XML Namespace ins XAML einzubinden:
xmlns:ui="clr-namespace:SelectionDemo.Helper"
Für die Einbindung gibt es nun mehrere Möglichkeiten. Zum einen ist es möglich, die Attachted Property direkt auf jeder TextBox zu setzen, und auf true zu stellen, für welche diese Funktionalität Anwendung finden sollte. Allerdings ist es auch möglich, dies auf einem Panel bzw. einem beliebigen Container zu setzen. Diese Einstellung bezieht sich dann auf alle Kinder vom Typ TextBox:
<Grid
Grid.Row="0"
Grid.Column="0"
ui:TextBoxSelector.SelectAllOnFocus="true">
<TextBox Text="{Binding FirstName}"/>
<TextBox Text="{Binding LastName}"/>
</Grid>
Attached Properties sind eine gute Möglichkeit, zusätzliche Funktionalitäten unter zu bringen, ohne Codebehind für eine View schreiben zu müssen bzw. den Einsatz von entsprechenden Patterns zu unterstützen. Dieses Beispiel zeigt, wie einfach es eigentlich ist.
| | | 1 Kommentar
- 220 mal angesehen
| 1 Trackbacks
| Permalink | Trackback-URL |
Das war der WPF/Silverlight Community Day 2010
31.01.10 - .NET, WPF, Silverlight, Community Beitrag von Norbert Eder| | Am Freitag, dem 29. Januar 2010, fand in Graz der erste WPF/Silverlight Community Day statt. Einen ganzen Tag lang standen die Windows Presentation Foundation und Silverlight im Vordergrund. Nicht ganz 20 Personen fanden sich ein, um Vorträgen zu lauschen und Erfahrungen untereinander auszutauschen.
Insgesamt standen vier Vorträge auf dem Programm:
In WPF 4 - Neuerungen im Überblick zeigte Norbert Eder wichtige Neuerungen der kommenden Version, angereichert um Beispiele, welche diese verdeutlichten.
Silverlight 4 - Neuerungen im Überblick, gehalten von Mario Meir-Huber, brachte die neuen Features von Silverlight 4 unters Volk. Auch hier wurden zahlreiche Beispiele gezeigt, welche die Funktionalitäten veranschaulichen und die Mächtigkeit von Silverlight 4 aufzeigen sollten.
Nach einem gemütlichen Mittagessen wurde der Nachmittag eingeläutet.
Norbert Eder gab in WPF - MVVM verwenden einen Überblick über das MVVM-Pattern und ging dabei auch auf eine fortgeschrittene Architektur, basierende auf diesem Pattern, ein. In einem Live-Coding wurde die grundsätzliche Trennung der Zuständigkeiten gezeigt und einige wichtige Aspekte mit dem Auditorium diskutiert.
Den Abschluss machte Mario Meir-Huber mit seiner Session über Silverlight 4 Line of Business Applications mit den .NET RIA Services. Dabei handelte es sich um eine reine Praxis-Session in der anhand eines einfachen Beispiels die Zusammenarbeit beider Technologien demonstriert und diskutiert wurde.
Nach den Sessions blieb noch genügend Zeit für ein ausgeprägtes Socializing, welches von den Teilnehmern ausreichend genutzt wurde. So wurden einzelne Thematiken in Gruppen gesprochen, als auch aus der täglichen Praxis (inklusive auftretender Probleme) berichtet.
Schließlich ließen es sich einige nicht nehmen, an der Abendveranstaltung teilzunehmen und gemeinsam auf einen erfolgreichen Tag anzustoßen.
Als einer der Organisatoren möchte ich mich recht herzlich bei allen Teilnehmern für ihre Anwesenheit und angeregte Diskussionen und Gespräche bedanken.
Die Folien der einzelnen Sessions finden sich online auf der Veranstaltungs-Seite:
WPF/Silverlight Community Day - Session Slides
| | | 1 Kommentar
- 157 mal angesehen
| 0 Trackbacks
| Permalink | Trackback-URL |
Unterstützung ist gefragt - Eine gute Tat im neuen Jahr
08.01.10 - .NET, WPF, Internet, Community Beitrag von Norbert Eder| | Mario Meir-Huber hat für die Mix10 einen Beitrag Microsoft Surface goes social – a research project at the University of Linz eingereicht und hofft nun natürlich, dass er diesen auch vortragen kann.
Dazu braucht er unsere Stützung durch ein Voting, damit er auch noch die letzte Runde, welche bis 15. Januar dauert, schafft.
Wer ihn dahingehend unterstützen möchte, hätte folgende Schritte zu tun:
- Auf diese Seite gehen: http://visitmix.com/opencallvote/
- Im Suchfeld nach "Mario Meir-Huber" suchen und dann auf "Add This Entry to Ballot" klicken (Link ist unten)
- Dann auf "Submit Your Ballot" im rechten Feld klicken.
Vielen Dank für die Unterstützung und es würde mich persönlich sehr freuen, könnte Mario als Speaker auf der Mix teilnehmen. Österreich wäre dadurch sicherlich gut vertreten.
| | | 3 Kommentare
- 4525 mal angesehen
| 1 Trackbacks
| Permalink | Trackback-URL |
Impressionen vom .NET Open Space Wien 2009
23.12.09 - .NET, WPF, Silverlight Beitrag von Norbert Eder
Webcam per Silverlight verwenden
20.12.09 - .NET, WPF, Silverlight Beitrag von Norbert Eder| | Silverlight 4 macht die Verwendung von einigen Features überhaupt erst möglich bzw. viel einfacher als bisher gewohnt. Dieses Beispiel zeit, wie einfach auf eine installierte Webcam zugegriffen werden kann.
Dazu wird eine einfache Oberfläche benötigt, die sich in diesem Fall aus einem Grid, einem Rectangle und zwei Buttons zum Aktivieren und Deaktieren der Webcam zusammen setzt:
<Grid x:Name="LayoutRoot" Background="White">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Rectangle x:Name="VideoVisualization"
Grid.Row="0"
Grid.Column="0"
Grid.ColumnSpan="2"
Margin="30">
<Rectangle.Effect>
<DropShadowEffect BlurRadius="15"
Color="Black"
ShadowDepth="4"/>
</Rectangle.Effect>
</Rectangle>
<Button x:Name="TurnOnButton"
Content="Turn on Webcam"
Grid.Row="1"
Grid.Column="0"
Click="TurnOnButton_Click"
Margin="5"/>
<Button x:Name="TurnOffButton"
Content="Turn off Webcam"
Grid.Row="1"
Grid.Column="1"
Click="TurnOffButton_Click"
Margin="5"/>
</Grid>
Um nun auf die Webcam zuzugreifen werden einige Klassen benötigt:
- CaptureDeviceConfiguration - Stellt den Zugriff auf das Standard-Video Capturing Device zur Verfügung, als auch den Zugriff auf die Audio-Funktionalität. Ebenfalls kann darüber der Zugriff auf die Komponente angefordert werden.
- CaptureSource - Klasse für das tatsächliche Capturing
- VideoBrush - Zeichnet den tatsächlichen Videobereich
Mit diesen Informationen kann eine einfache Klasse zur Steuerung der Webcam entwickelt werden:
public class WebcamHandler
{
private VideoCaptureDevice videoDevice;
private CaptureSource source;
private Shape visualizationElement;
public Shape VisualizationElement
{
get { return visualizationElement; }
set { visualizationElement = value; }
}
public void Start()
{
videoDevice = CaptureDeviceConfiguration.GetDefaultVideoCaptureDevice();
if (CaptureDeviceConfiguration.RequestDeviceAccess())
{
if (source != null)
{
source.Start();
return;
}
source = new CaptureSource();
source.VideoCaptureDevice = videoDevice;
VideoBrush videoBrush = new VideoBrush();
videoBrush.SetSource(source);
videoBrush.Stretch = Stretch.UniformToFill;
source.Start();
VisualizationElement.Fill = videoBrush;
}
}
public void Stop()
{
source.Stop();
}
}
Diese Klasse muss nun lediglich im Codebehind innerhalb der Button-Handler eingebunden werden:
public partial class MainPage : UserControl
{
WebcamHandler webcam = new WebcamHandler();
public MainPage()
{
InitializeComponent();
}
private void TurnOnButton_Click(object sender, RoutedEventArgs e)
{
webcam.VisualizationElement = VideoVisualization;
webcam.Start();
}
private void TurnOffButton_Click(object sender, RoutedEventArgs e)
{
webcam.Stop();
}
}
Und schon kann unsere Beispiel-Anwendung gestartet werden. Beim Aufruf von CaptureDeviceConfiguration.RequestDeviceAccess() erscheint ein Dialog, mit dem wir den Zugriff gewähren müssen:
Wurde der Zugriff gewährt, startet das Capturing:
Die Demoanwendung gibt es natürlich auch noch als Download.
| | | 2 Kommentare
- 492 mal angesehen
| 1 Trackbacks
| Permalink | Trackback-URL |
WPF/Silverlight Community Day
03.12.09 - .NET, WPF, Silverlight Beitrag von Norbert Eder| | Am 29. Jänner 2010 findet in Graz zum ersten Mal der WPF/Silverlight Community Day statt, welcher von Mario Meir-Huber und mir veranstaltet wird. Einen ganzen Tag lang dreht sich alles um besagte Technologien.
Im Rahmen von Vorträgen wird nicht nur Wissen transferiert, es bleibt zusätzlich genügend Raum für spannende Diskussionen und Socializing. Abgeschlossen wird der Tag durch eine Abendveranstaltung, an der jeder herzlich zur Teilnahme eingeladen ist.
Für diese Veranstaltung stehen insgesamt 40 Plätze zur Verfügung und ist grundsätzlich kostenlos. Da wir neben der Raummiete auch für ein Catering sorgen möchten, bitten wir um eine kleine Spende.
Nachfolgend finden sich Links zu weiterführenden Informationen:
WPF/Silverlight Community Day
Veranstaltungsort
Sessions
Auf den Seiten der Veranstaltung finden sich zusätzlich Informationen zu den Themen Unterkunft, Anreise, Parken und der Abendveranstaltung. Diese werden natürlich laufend erweitert und aktualisiert.
Alle Neuigkeiten, Änderungen und Informationen können auch via Twitter bezogen werden: twitter.com/communityday.
| | | 1 Kommentar
- 398 mal angesehen
| 1 Trackbacks
| Permalink | Trackback-URL |
Making of Community-Projects – Interview mit Norbert Eder
06.11.09 - .NET, Grundlagen, Base Framework, WPF, ASP.NET, Silverlight, Mobile Devices, Datenverwaltung, Visual Studio, Allerlei, Internet, Community Beitrag von Norbert Eder| | Gregor Biswanger hat mich vor einigen Tagen zum Thema Making of Community-Projects interviewt. Dabei ist ein nettes Gespräch entstanden, welches seit gestern bei ihm zu lesen ist. Es stand die Frage im Raum, wie es denn zu Community-Projekten kommt und wie man denn diese schließlich aufbaut. Ein nettes Gespräch, wo es wohl noch massig weitere Dinge zu sagen gäbe.
Zum Interview
| | | Kommentar hinzufügen
| 0 Trackbacks
| Permalink | Trackback-URL |
Commands aus ListView ausführen
19.09.09 - .NET, WPF Beitrag von Norbert Eder| | Mit Hilfe einer ListView ist es einfach möglich, Daten aus einer Datenquelle darzustellen. Dazu ist lediglich die Eigenschaft View zu definieren. Durch die Angabe von GridViewColumn Elementen und dem dazugehörigen DisplayMemberBindings werden die Daten aus der zugewiesenen Datenquelle auch schon angezeigt.
<ListView ItemsSource="{Binding MyOpenTickets}" BorderThickness="0" Margin="4">
<ListView.View>
<GridView>
<GridViewColumn Header="Id"
DisplayMemberBinding="{Binding Id}"/>
<GridViewColumn Header="Name"
DisplayMemberBinding={Binding Name}/>
<GridViewColumn Header="Version"
DisplayMemberBinding="{Binding Version.Name}"/>
<GridViewColumn Header="Status"
DisplayMemberBinding="{Binding State}"/>
</GridView>
</ListView.View>
</ListView>
Eine Anforderung ist nun sehr oft, dass die angezeigten Daten in einem Detailfenster geöffnet werden sollen. Dazu muss - idealerweise - ein Command untergebracht werden. Dies kann durch die Angabe eines CellTemplates bewerkstelligt werden.
<ListView ItemsSource="{Binding MyOpenTickets}" BorderThickness="0" Margin="4">
<ListView.View>
<GridView>
<GridViewColumn Header="Id"
DisplayMemberBinding="{Binding Id}"/>
<GridViewColumn Header="Name"
CellTemplate="{StaticResource TicketClickableButton}"/>
<GridViewColumn Header="Version"
DisplayMemberBinding="{Binding Version.Name}"/>
<GridViewColumn Header="Status"
DisplayMemberBinding="{Binding State}"/>
</GridView>
</ListView.View>
</ListView>
In der zweiten GridViewColumn-Definition wird das CellTemplate definiert. Zu beachten ist an dieser Stelle, dass kein DisplayMemberBinding angegeben werden darf. Hier nun das verwendete Template:
<DataTemplate x:Key="TicketClickableButton">
<Button Command="{Binding OpenTicketCommand}"
Content="{Binding Name}"
Style="{StaticResource ProjectLinkButton}" />
</DataTemplate>
Das Template stellt eine einfache Schaltfläche dar, welche an einen Command gebunden ist. Zusätzlich wird an der Schaltfläche das Binding definiert.
Eine mögliche Umsetzung kann so aussehen:

| | | 2 Kommentare
- 2921 mal angesehen
| 0 Trackbacks
| Permalink | Trackback-URL |
.NET BlogBook wieder verfügbar
29.08.09 - Blog-Intern, .NET, Grundlagen, Base Framework, WPF, ASP.NET, Silverlight, Internet, Community Beitrag von Norbert Eder| | Wie auch mein Blog waren einige meiner Websites lange Zeit nicht online (bzw. sind es teilweise noch immer). Dies wird sich nun - durch einen Wechsel - wieder ändern.
Den Anfang macht dotnet-blogbook.com. Die Site steht ab sofort wieder zur Verfügung - jedoch noch nicht alle Downloads. Alle BlogBooks bis inklusive Version 3 können herunter geladen werden. Die weiteren Ausgaben werden in den kommenden Tagen hinzugefügt und stehen dann wie gewohnt zur Verfügung.
Gerade zum BlogBook habe ich sehr viele Anfragen bekommen. Das Projekt wird weitergeführt und es wird auch wieder aktualisierte Versionen geben.
| | | Kommentar hinzufügen
| 0 Trackbacks
| Permalink | Trackback-URL |
Neuer Artikel: Validierung unter WPF
02.07.09 - .NET, WPF, Silverlight Beitrag von Norbert Eder| | In der aktuellen Ausgabe der Visual Studio One findet sich mein neuester Artikel Validierung unter WPF.
Intuitive Anwendungen weisen den Benutzer auf Fehleingaben hin. Idealerweise geschieht dies direkt in der UI, frühzeitig, ohne lange Wartezeiten. Zusätzlich ist es notwendig, Daten in der Businesslogik auf Korrektheit und Vollständigkeit zu prüfen. Norbert Eder diskutiert die Validierungsmöglichkeiten im Rahmen der Windows Presentation Foundation.
Weitere Informationen finden sich auf der Homepage von Visual Studio One.
| | | Kommentar hinzufügen
| 1 Trackbacks
| Permalink | Trackback-URL | Zurück Weiter
|
|
|
|
|
|
|