ListBoxi hiirega kerimine

Üks Silverlighti nõrk külg on see, et igasuguste loetelude hiirega kerimine vaikimisi ei tööta. Sellest puudusest müüda saamiseks leidub erinevates foorumites päris mitmeid lahendusi, kuid enamus neist on üsna keerulised ja eeldavad palju koodi kirjutamist. Hiljuti õnnestus mul aga üks selline lahendus leida, mida on hästi lihtne implementeerida.

Keritav ListBox

Oletame, et meil on järgmine värvide nimesid sisaldav ListBox:

image thumb13 ListBoxi hiirega kerimine

Siis üks võimalus see keritavaks muuta on panna see ScrollViewer-i sisse. Selleks tuleb parema klahviga vajutada ListBoxi peal ja valida sealt Group Into > ScrollViewer.

image thumb14 ListBoxi hiirega kerimine

Tulemus võiks olla midagi sellist:

image thumb15 ListBoxi hiirega kerimine

Hiire toe lisamine

Hiirega kerimise jaoks on vaja alla laadida ja lahti pakkida SharpGISBehaviors. Selle kasutamiseks tuleb projekti lisada veel viide SharpGIS.Silverlight.Behaviors\BehaviorTests\Bin\Debug\SharpGIS.Silverlight.Behaviors.dll failile

image thumb16 ListBoxi hiirega kerimine

ja lohistada MouseScrollViewer varem loodud ScrollVieweri peale.

scroll thumb ListBoxi hiirega kerimine

Ongi valmis!

Demo

Faili allalaadimise dialoog

Veel üks Silverlight 3 uus feature on võimalus lihtsalt luua faili allalaadimise dialoog.image thumb10 Faili allalaadimise dialoog

Selleks tuleb kõigepealt muidugi luua nupp ja sellele vastav event.

image thumb11 Faili allalaadimise dialoog image thumb12 Faili allalaadimise dialoog

Save_Click meetodis tuleb kõigepealt luua uus SaveFileDialog:

SaveFileDialog dialog = new SaveFileDialog()

Järgmisena tuleb ära määrata salvestava faili tüüp. See ei ole küll kohustuslik, aga teeb kasutajal elu mugavamaks. Eriti kui on teada, et salvestatakse näiteks ainult tekstifaile.

{
DefaultExt = "txt",
Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*",
FilterIndex = 1
};

Viimasena tuleb paika panna see, kuidas info sinna salvestatavasse faili saab.

bool? dialogResult = dialog.ShowDialog();
if(dialogResult == true){
    StreamWriter writer = new StreamWriter(dialog.OpenFile());
    foreach (string el in selectedList){
        writer.WriteLine(el);
    }
    writer.Dispose();
    writer.Close();
}

Oma sõnaraamatu puhul hoiame me kõiki sõnu List<string> tüüpi muutujas selectedList ja see kood võtabki siis kõik seal listis olevad sõned ja kirjutab need faili.

Lõpuks veel kogu Save_Click meetod:

private void Save_Click(object sender, System.Windows.RoutedEventArgs e)
{
    SaveFileDialog dialog = new SaveFileDialog()
    {
        DefaultExt = "txt",
           Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*",
        FilterIndex = 1
    };

    bool? dialogResult = dialog.ShowDialog();
    if(dialogResult == true){
        StreamWriter writer = new StreamWriter(dialog.OpenFile());
        foreach (string el in selectedList){
            writer.WriteLine(el);
        }
        writer.Dispose();
        writer.Close();
    }
}

Visual Studio veel natukene kiiremaks

Teate seda Visual Studio akent (logo ja nimed), mida käivitamisel näidatakse… vot selle saab ära jätta ja siis läheb VS vähemasti 2 sekundit kiiremini käima… seda ei ole palju aga samas sekunditest saavad minutid ja minutitest tunnid, nii et pikemas perspektiivis võib see täitsa ära tasuda…

Ilma splash-screen’ita näitamiseks tuleb lisada /nosplash argument

Visual Studio 2008 short-cuti peal paremklikk ja siis modifitseerida target väärtust:

“C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe”  /nosplash

Silverlight täitma tervet veebilehte

Mõni postitus tagasi andsin nipi, kuidas Silverlight rakendused täisekraanile saada aga on ju veel üks variant täisekraanist – see, kui rakendus täidab kogu veebilehe.

Luues Silverlight rakenduse näeb Page.xaml fail alguses välja umbes selline:

<UserControl x:Class=”h6bevalge.Tips.Autosize.Page”

    xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation” 

    xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml” 

    Width=”400″ Height=”300“>

    <Grid x:Name=”LayoutRoot” Background=”White”>

        <Button x:Name=”button” Content=”Tere!” />

    </Grid>

</UserControl>

Kus Width=”400″ Height=”300″  on rakenduse suurus, et see oleks täpselt nii suur kui on veebilehitseja võib need väärtused täitsa ära kustutada, mis on samaväärne väärtustega Width=”Auto” Height=”Auto”. Iga objekt, mille kõrgus või laius on Auto täidab ära kogu ruumi, mis tal antud on. 
Kasutades Width=”Auto” Height=”Auto” tekib aga rakenduses Expression Blend veidi ebamugavusi – esialgne kujundus läheb täiesti paigast ära, sest objektid ei asu veebilehitsejas  ja seega neil ei ole mingit ruumi antud ning kõike näidatakse 0×0 suurusega… et seda vältida võib paika seada suurused disainiajaks - d:DesignWidth=”640″ d:DesignHeight=”480″ nii on paigutus ka Blendis paigas.

Tip #2: Silverlight täisekraanile

Silverlight template rakendused, mille loovad Expression Blend ja Visual Studio, võtavad vaikimisi ekraanil 640 x 400 pikslit. Selleks, et rakendus võtaks veebilehel ruumi nii palju kui võtta on tuleb teha järgnevat:

Page.xaml failis tuleks igasuguste paigutushaldurite (näiteks UserControl ja Grid) kõrguseks ja laiuseks panna Auto – see tähendab, et nii palju kui sisu ruumi võtab.

Et Silverlight päris täisekraanile saada tuleb kirjutada järgnevalt:

1:  Application.Current.Host.Content.IsFullScreen = true;

Kusjuures turvalisuse kaalutlustel ei saa seda teha rakenduse laadides, sest muidu teeks keegi windowsi klooni ja varastaks kõigi paroolid ära :)

Täisekraaniga on seotud ka üks sündmus: FullScreenChanged, seda võib kasutada näiteks täisekraanile viiva nupu näitamiseks ja peitmiseks:

Lisame sündmusekuulari:

1:  Application.Current.Host.Content.FullScreenChanged += new EventHandler(Content_FullScreenChanged);

Sündmusehaldur:

1:  void Content_FullScreenChanged(object sender, EventArgs e)
2:  {
3:      if (Application.Current.Host.Content.IsFullScreen)
4:      {
5:          fullscreenButton.Visibility = Visibility.Collapsed;
6:      }
7:      else {
8:          fullScreenButton.Visibility = Visibility.Visible;
9:      }
10:  }

PowerPoint navigeerimise tip

Selleks, et hiire parem nupp viiks eelmisele slaidile tuleb teha nii:

1.PowerPoint Options

image thumb3 PowerPoint navigeerimise tip

2. Advanced –> Eemaldada linnuke Show menu on right click

image thumb4 PowerPoint navigeerimise tip

Tip #1: Ava failid alati XAML vaates

Üks asi, mis Visual Studio juures kohati tüütu on, on fakt, et VS avab XAML faile alati disainivaates ning iga muudatuse juures kulutab aega disaini renderdamisele ja näitamisele. Aga sellest saab loobuda!

Visual Studios on vaja vajutada nii: Tools –> Options –> Text Editor –> XAML –> Miscellanelous –> Always open documents in full XAML view.

Minu arvuti peal on juba projekti avamisel võit paar kolm sekundit… Ja iga sekund on säästmist väärt!

image thumb Tip #1: Ava failid alati XAML vaates