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.