0

HTML: Link zentrieren

Um einen Link zu zentrieren, muss man ein Textelement um den Link herumbauen. Gibt man dem Link selber das entsprechenden Attribut passiert nichts, da der Text nur im Link selbst zentriert wird, nicht jedoch auf der Seite.

<div style="text-align:center">
  <a href="http//www.informatik-pc.de/blog">http//www.informatik-pc.de/blog</a>
</div>

Das ganze muss natürlich kein <div> sein. Mit <p> geht es natürlich auch.

3

Google: Diskussionen durchsuchen verschwunden

Ich hab heute entdeckt, dass Google die Funktion entfernt hat Diskussionen, also Foren, zu durchsuchen. Früher konnte man seine Suchergebnisse so anpassen, das nur in Diskussionen gesucht wird. Dies war oftmals hilfreich um irgendwelche Testberichte oder Probleme von Usern zu finden, die sie in ein x-beliebiges Forum geschrieben haben.

Um die Diskussionen-Suche zu nutzen ist man früher einfach auf der Google-Suchergebnisseite auf den Dropdown-Button „Mehr“ gegangen. Doch jetzt kann man da nur noch Maps, Bücher, Flüge und Apps auswählen.

Doch die Funktion ist noch in Google nutzbar. Über den untenstehenden Link kann man nach wie vor Diskussionen durchsuchen 😉

https://www.google.de/webhp?tbm=dsc



EDIT: Wie in den Kommentaren zu lesen, funktioniert der Link leider nicht mehr… Eine Lösung habe ich leider noch nicht gefunden…
EDIT 2: Ich habe eine Lösung gefunden!

2

WPF: Modifier Keys (Shift, Control, Alt, Windows) bei Tastendruck erkennen

Will man in C# verschiedene Tastatur-Eingaben erkennen, so kann man einfach einen Handler auf das KeyDown-Event registrieren. Dort fragt man dann folgendermaßen die gedrückte Tasten ab:

private void Window_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Escape)
    {
        // do sth. here
    }
 }

Hier wird also geschaut, ob die Escape-Taste gedrückt wurde. Dann kann man beispielsweise das Window schließen, auf welchem das Event registriert ist.

Will man allerdings noch die Modifier Keys, also Shift, Steuerung, Alt oder Windows abfragen, gestaltet sich das ganze einen Tick schwieriger.
Das folgende Beispiel zeigt, wie man [Shift] + [Ctrl] + P abfragen kann.

if (e.Key == Key.P && Keyboard.Modifiers.HasFlag(ModifierKeys.Shift) && Keyboard.Modifiers.HasFlag(ModifierKeys.Control))
{
    // do sth. here
}

Alternativ kann man das auch mit InputBindings und Commands machen. Dazu verwendet man z.B. den RelayCommand von John Smith (http://msdn.microsoft.com/de-de/magazine/dd419663.aspx) und fügt dann dem XAML so das InputBinding hinzu:

<Window>
    <Window.InputBindings>
        <KeyBinding Key="P" Modifiers="Control+Shift" Command="{Binding MYRELAYCOMMAND}"/>
    </Window.InputBindings>
</Window>

MYRELAYCOMMAND muss natürlich ersetzt und vorher erstellt werden.

0

WPF: Data Binding mit Properties aus ViewModel

In diesem Artikel beschreibe ich, wie das Data Binding in C# in einem WPF-Projekt funktioniert. Dadurch lässt sich das MVVM-Model (Model, View, ViewModel) realisieren.
Als kleines Beispiel dient hier ein Programm in dem der Status einer CheckBox an ein Property aus dem ViewModel gebunden wird.

Aufbau

In meinem Projekt gibt es einen Ordner Views für die Views und einen Ordner ViewModels in dem sich alle ViewModels befinden. Dort befinden sich jetzt jeweils eine View bzw. ein ViewModel:

– Views
— MyView.xaml (und MyView.xaml.cs)

– ViewModels
— MyViewModel.cs

Viewmodel

Zunächst zum ViewModel. Zuerst braucht man einen PropertyChangedEventHandler, damit signalisiert werden kann, wenn sich was ändert. Das Ganze kann auch bequem in eine Oberklasse ausgelagert werden und alle ViewModels erben dann von dieser Basisklasse.
Natürlich muss man auch noch das Property anlegen.

class MyViewModel : INotifyPropertyChanged
{
    private bool isCheckBoxChecked;

    public bool IsCheckBoxChecked
    {
        get
        {
            return this.isCheckBoxChecked;
        }

        set
        {
            if (this.isCheckBoxChecked != value)
            {
                this.isCheckBoxChecked = value;
                this.NotifyPropertChanged("IsCheckBoxChecked");
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    public void NotifyPropertChanged(string propertyName)
    {
        if (this.PropertyChanged != null)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    public MyViewModel()
    {
        this.IsCheckBoxChecked = true;
    }
}

Als letzten Schritt setze ich noch probehalber das Property im Konstruktor auf true, so dass beim Testen die CheckBox aktiviert sein müsste.

View

Aber zunächst zu View.
Im XAML wird eine CheckBox erstellt, welche den IsChecked-Wert mit eben erstelltem Property aus dem ViewModel verbindet.

<CheckBox IsChecked="{Binding IsCheckBoxChecked}" />

Damit das ganze funktioniert, müssen wir nun noch die View mit dem ViewModel verbinden. Dazu müssen wir den Kontext setzen:

public partial class MyView : Window
{
    private MyViewModel mainViewModel;

    public MyView()
    {
        InitializeComponent();

        this.mainViewModel = new MyViewModel();
        this.DataContext = mainViewModel;
    }
}

Wir erstellen uns nämlich zunächst eine ViewModel-Instanz und legen den DataContext dann darauf.

Startet man das Programm nun, so wird die CheckBox markiert und der Status ist im ViewModel änderbar und abfragbar.

1

WPF: Klickbaren Link (Hyperlink) in MessageBox erzeugen.

In C# kann man in den Standard-MessageBoxen (MessageBox.Show(„MeinText“)) keine URLs angeben, welche bei Klick im Browser besucht werden. Erstellt man sich ein eigenes Fenster (Window) dafür, so stößt man auch hier auf Schwierigkeiten, da der Link dann dort korrekt als Hyperlink angezeigt wird, aber dennoch bei einem Klick nichts passiert. Um das zu beheben geht man so vor:

Run link = new Run("http://www.informatik-pc.de/blog");
Hyperlink hyperl = new Hyperlink(link);
hyperl.RequestNavigate += (sender, e) => { System.Diagnostics.Process.Start(e.Uri.ToString()); };
hyperl.NavigateUri = new Uri("http://www.informatik-pc.de/blog");

Wichtig ist hier Zeile 3. Dadurch wird veranlasst, dass eine Navigation erfolgen soll.

0

WPF: Window.Icon aus Code-Behind-Datei ändern/ setzen

Als ich in C# in einem Window, beispielsweise für eine eigene MessageBox, das Icon ändern, so habe ich zunächst Probleme gehabt das Bild zu referenzieren. Neben NotSupportedExceptions habe ich auch DirectoryNotFoundExceptions bekommen.

Korrekt macht man es so:

Window window = new Window();
windows.Icon = new BitmapImage(new Uri(@"pack://application:,,/MYFOLDER/MYIMAGE.png"));

MYFOLDER muss natürlich genau wie MYIMAGE entsprechend geändert werden.
MYFOLDER taucht bei mir deshalb auf, weil ich alle meine Bilder in einem extra Ordner in meinem Projekt habe.