Biggle's Blog

Web- und Software Development

by Mario Priebe

Toggle – WindowState Maximize / Normal

Wenn man in seiner WPF Applikation eigene Application-Icons zum minimieren, maximieren, schließen, usw. einsetzt, muss man erstens das Verhalten und zweitens das Aussehen selbst implementieren.

In diesem Snippet möchte ich zeigen, wie man zwischen den angezeigten Grafiken wechselt, wenn der entsprechende Zustand eintrifft.

Ist die Applikation im maximierten Zustand soll das Icon für “minimieren” angezeigt werden und wenn der Zustand der Applikation im normalen Zustand ist, anders herum.

Dies geht recht einfach mit einem Style und einem DataTrigger:

    <Style TargetType="Image" x:Key="ToggleIcon">
        <Setter Property="Source" Value="{DynamicResource MaximizeIcon}" />
        <Style.Triggers>
            <DataTrigger Binding="{Binding WindowState, ElementName=TheNameOfMyWindow}" Value="Maximized">
                <Setter Property="Source" Value="{DynamicResource NormalIcon}" />
            </DataTrigger>
        </Style.Triggers>
    </Style>

Die DynamicResources in dem Beispiel sind gebunden an eine ImageSource:

    <ImageSource x:Key="MaximizeIcon">/MyApp.UI.Resources;component/Images/icon_maximize.png</ImageSource>
    <ImageSource x:Key="NormalIcon">/MyApp.UI.Resources;component/Images/icon_normal.png</ImageSource>

Die Verwendung ist dann nur noch Formsache…

<Image Stretch="None" Style="{DynamicResource ToggleIcon}" HorizontalAlignment="Right" VerticalAlignment="Top" Cursor="Hand" 
ToolTip="{x:Static Resources:Resources.maximize}" MouseLeftButtonDown="ToggleMaxNormal" />
private void ToggleMaxNormal(object sender, MouseButtonEventArgs e)
{
    switch (WindowState)
    {
        case WindowState.Normal:
            WindowState = WindowState.Maximized;
            break;
        case WindowState.Maximized:
            WindowState = WindowState.Normal;
            break;
    }
}

Viel Spaß beim entwickeln : )

by Mario Priebe

Wie verhindere ich beim Klick eines HyperlinkButtons in Silverlight die Umrandung – Quicky

Ja der Titel des Beitrags ist länger als der folgende “Silverlight-Quicky”. Aber was soll :)

Setzt man ein HyperlinkButton ein, so erscheint bei einem Klick aus diesen, ein nicht so toller Rahmen rundherum.

image

Um das zu verhindern, muss man die Property IsTabStop auf False setzen.

<HyperlinkButton Content="Mein Linktext" IsTabStop="False" ... />

Dann klappt’s auch ohne Rahmen Zwinkerndes Smiley


Viel Spaß beim entwickeln : )

by Mario Priebe

Wie ermittle ich eine Telefonnummer aus dem Telefonbuch? – WP7 Quicky

Um eine Telefonnummer aus dem Telefonbuch des Benutzers vom Windows Phone 7 zu ermitteln, kann man mit seiner Applikation den Benutzer dazu aufordern, die entsprechende Nummer zu selektieren. Dazu verwendet man die Klasse PhoneNumberChooserTask aus dem Namespace Microsoft.Phone.Tasks.

1
2
3
PhoneNumberChooserTask pck = new PhoneNumberChooserTask();
pck.Completed += new EventHandler<PhoneNumberResult>(pck_Completed);
pck.Show();

In der CompletedMethode steht dann zur Weiterverarbeitung die selektierte Telefonnummer zur Verfügung.

1
2
3
4
void pck_Completed(object sender, PhoneNumberResult e)
{
    MessageBox.Show(e.PhoneNumber);
}

by Mario Priebe

TextTrimming – XAML Quicky

Im XAML hat man die Möchglichkeit den Text zu kürzen, wenn dieser länger ist, als die Oberfläche es zulässt.

Man kann bestimmen, ob man nach einem Wort (WordEllipsis) und nach einem Buchstaben (CharacterEllipsis) den Text abtrennt. 3 Punkte (…) zeigen dem Benutzer an, das hier weiterer Text hinterlegt ist.

1
2
<TextBlock  Name="sampleTextBlock" TextTrimming="WordEllipsis"  TextWrapping="NoWrap" 
                    Text="Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet."/>

Viel Spaß beim entwickeln : )

by Mario Priebe

Doppelklick im DataGrid abfangen – WPF Quicky

Möchte man auf den Klick eines Datensatzes  in einem WPF DataGrid reagieren, so kann man folgenden Code dazu verwenden:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private void dataGrid_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    DependencyObject dep = (DependencyObject)e.OriginalSource;
 
    while ((dep != null) && !(dep is DataGridRow))
    {
        dep = VisualTreeHelper.GetParent(dep);
    }
 
    if (dep == null)
        return;
 
    if (dep is DataGridRow)
    {
        DataGridRow dataGridRow = dep as DataGridRow;
        //tu was
    }
}

Den Klick auf denDataGrid-ColumnHeader oder einer DataGrid-Zelle kann mit der selben Methode behandelt werden. Hier wird einfach die Abfrage mit in das if-Statement aufgenommen und im Rumpf dementsprechend behandelt.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
private void dataGrid_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    DependencyObject dep = (DependencyObject)e.OriginalSource;
 
    while ((dep != null) && !(dep is DataGridRow) && !(dep is DataGridColumnHeader) && !(dep is DataGridCell))
    {
        dep = VisualTreeHelper.GetParent(dep);
    }
 
    if (dep == null)
        return;
 
    if (dep is DataGridRow)
    {
        DataGridRow dataGridRow = dep as DataGridRow;
        //tu was
    }
 
    if (dep is DataGridColumnHeader)
    {
        DataGridColumnHeader columnHeader = dep as DataGridColumnHeader;
        //tu was
    }
 
    if (dep is DataGridCell)
    {
        DataGridCell cell = dep as DataGridCell;
        //tu was
    }
 
}


Viel Spaß beim entwickeln : )

by Mario Priebe

Windows Phone 7 Trialmode – WP7 Quicky

Möchte man eine Applikation bauen, die ein paar Taler einbringen soll, kann man den Benutzer vorher die Möglichkeit geben, etwas in die App reinzuschnuppern. Habe ich Funktionen, welche nur in der bezahlten Version verfügbar sind, muss ich den Lizenzmodus abfragen.

Im SDK vom Windows Phone 7 steht dazu im Namensraum Microsoft.Phone.Marketplace die Klasse LicenseInformation mit der Methode IsTrial() bereit, mit der ich diesen Status abfragen kann.

1
2
3
4
var licenseInformation = new Microsoft.Phone.Marketplace.LicenseInformation();
 
if(!licenseInformation.IsTrial())
    //implemtents here your payed content

Viel Spaß beim entwickeln : )