• Nie Znaleziono Wyników

właściwość Cursor można ustawić dla każdego elementu

kursory systemowe dostępne jako statyczne właściwości klasy Cursors:

button1.Cursor = Cursors.Wait;

a w XAMLu:

<Button Cursor="Help">Help</Button>

jeśli ustawienia kursora się nakładają (np. okna i kontrolki na nim umieszczonej) –

wybierana jest właściwość bardziej specyficzna (czyli nad kontrolką jest kursor kontrolki, a nad resztą okna – kursor okna)

przeciwdziała temu:

ForceCursor – aby ojciec nadpisał kursora dzieci

inne rozwiązanie – kursor dla każdego elementu każdego okna aplikacji:

Mouse.OverrideCursor = Cursors.Wait;

własne kursory:

this.Cursor = new Cursor(Path.Combine(applicationDir, "mycursor.ani"));

Expander

 Ukrywa swoją zawartość, którą użytkownik może rozwinąć.

 IsExpanded – sterujemy rozwinięciem/zwinięciem

 ExpandDirection – kierunek rozwijania (domyślne Down lub Up, Left, Right)

<StackPanel>

<Expander Header="pierwsza">...</Expander>

<Expander Header="druga">

<StackPanel>

...

</StackPanel>

</Expander>

<Expander Header="trzecia">...</Expander>

</StackPanel>

Kontrolki tekstowe: TextBox Wprowadzanie kilku linijek tekstu:

 AcceptsReturn – ustawione na true pozwala na wprowadzanie Enterów

 AcceptsTab – podobnie z Tabami

 TextWrapping (ustawiona na Wrap lub WrapWithOverflow) – zawijanie zbyt długich wierszy (WrapWithOverflow pozwala wypływać poza kontrolkę zbyt długim liniom, Wrap zawsze łamie tekst)

<TextBox TextWrapping="Wrap" Margin="3">

AlamakotaAlamakota Alamakota</TextBox>

<TextBox TextWrapping="WrapWithOverflow" Margin="3">

AlamakotaAlamakota Alamakota</TextBox>

Ponadto:

 MinLines i MaxLines pozwalają na ustawienie rozmiaru kontrolki aby była w stanie wyświetlić zadeklarowaną liczbę linii

 LineCount – pozwala sprawdzić faktyczną liczbę linii

 VerticalScrollBarVisibility – ustawiając na Visible lub Auto dodajemy pasek przewijania

 IsReadOnly – tekst tylko do odczytu (ale pozwala wybrać go i skopiować w odróżnieniu od etykiety)

 Text – zawartość tekstowa

 Text Selection:

<TextBox Name="box">Ala ma kota. Ala ma kota</TextBox>

<Button Click="klik">zaznacz</Button>

private void klik(object sender, RoutedEventArgs e) {

box.SelectionStart = 5;

box.SelectionLength = 5;

box.SelectedText = "xxx";

box.Focus();

}

 Focus() – przejęcie „fokusa”

<DockPanel>

<Label DockPanel.Dock="Left">Dane</Label>

<Button DockPanel.Dock="Right" Click="Clear">Wyczyść</Button>

<TextBox Name="tekst"/>

</DockPanel>

private void Clear(object sender, RoutedEventArgs e) {

tekst.Text = "";

tekst.Focus();

}

Kontrolka, która aktualnie przyjmuje wejście z klawiatury, ma „focusa”.

właściwość Focusable – czy może przyjąć focusa

 Przechodzenie Tabem – na podstawie hierarchii zagnieżdżenia.

o Można to zmienić, wybierając własną sekwencję przez ustawienie właści-wości TabIndex (0 – pierwszy, a potem wraz ze wzrostem).

o IsTabStop – jeśli false, to danego elementu nie zwiedzamy Tabem (ale

na-PasswordBox

 Password – pozwala pobrać hasło

 (hasło przechowywane jest w pamięci w postaci zaszyfrowanej)

<StackPanel>

<DockPanel>

<Label Margin="3">Hasło</Label>

<PasswordBox Name="hasło" Margin="3"/>

</DockPanel>

<Button HorizontalAlignment="Center" Margin="3" Padding="15,3"

Click="OkClick">OK</Button>

</StackPanel>

private void OkClick(object sender, RoutedEventArgs e) {

MessageBox.Show("Twoje hasło to " + hasło.Password + "!");

}

Range-Based Controls (ScrollBar, Slider, ProgressBar)

 Przyjmują pewną wartość z ustalonego zakresu

 Value (aktualna wartość) – jej zmiana odpala ValueChanged

 Maximum i Minimum – dolny i górny zakres Slider:

 Orientation – w poziomie czy w pionie?

 TickPlacement – None, TopLeft lub BottomRight

 TickFrequency – odległość między tickami

 IsSnapToTickEnabled – doklejanie do ticków

<Slider Minimum="1" Value="15" Maximum="100" TickFrequency="10"

TickPlacement="TopLeft"/>

 Ticks – kolekcja położeń (jeśli np. mają być nieregularnie rozmieszczone)

 IsSelectionRangeEnabled – wybór zakresu na ścieżce (użyteczne np. w media playerach) (przy pomocy SelectionStart i SelectionEnd)

<Slider Margin="5" Value="1.5"/>

<Slider Margin="5" Value="1.5" TickFrequency="1"

TickPlacement="BottomRight"/>

<Slider Margin="5" Value="1.5" Ticks="1,2,3,5,8"

TickPlacement="BottomRight"/>

<Slider Margin="5" Value="1.5" TickFrequency="2.5"

TickPlacement="BottomRight" IsSelectionRangeEnabled="True"

SelectionStart="3" SelectionEnd="7"/>

Inny przykład:

<StackPanel Margin="5">

<Slider Margin="5" Minimum="10" Maximum="50" Value="12"

TickFrequency="5" TickPlacement="BottomRight"

ValueChanged="slide"/>

<Label HorizontalAlignment="Center">

To jest test slidera.

</Label>

</StackPanel>

private void slide(object sender,

RoutedPropertyChangedEventArgs<double> e) {

this.FontSize = e.NewValue;

}

ProgressBar

Nie zapewnia interakcji, a jedynie wyświetla jakąś informację dla użytkownika.

Pozwala też na stan nieokreślony (gdy nie wiemy ile czasu potrwa zdarzenie):

<ProgressBar Value="50" Height="18"/>

<ProgressBar Height="18" IsIndeterminate="True" />

Menu

Mamy dostępne dwie kontrolki: Menu (menu aplikacji) i ContextMenu (menu kontekstowe).

 Menu:

o Podlega zwyczajnym regułom rozmieszczania elementów (przeważnie jest na szczycie DockPanela lub w pierwszym wierszu Grida).

o Można dodać dowolną liczbę menu.

o Własność IsMainMenu ustawiona na true powoduje, że menu dostanie focusa po naciśnięciu klawisza Alt lub F10.

 ContextMenu:

o Nie jest umieszczane w oknie, lecz ustawiane dla konkretnego elementu.

MenuItem

Menu zbudowane jest z elementów typu MenuItem oraz Separator.

 MenuItem to rozwijalne podmenu.

 Separator to po prostu pozioma linia, nie reagująca na wejście użytkownika.

 Menu możemy (teoretycznie) wypełniać dowolnymi elementami (ale lepiej nie przesadzać).

<Menu DockPanel.Dock="Top">

<MenuItem Header="File">

<MenuItem Header="New"/>

<MenuItem Header="Open"/ >

<MenuItem Header="Save"/>

<Separator></Separator>

<MenuItem Header="Exit"/>

</MenuItem>

<MenuItem Header="Edit">

<MenuItem Header="Undo"/>

<MenuItem Header="Redo"/>

<Separator></Separator>

<MenuItem Header="Cut"/>

<MenuItem Header="Copy"/>

<MenuItem Header="Paste"/>

</MenuItem>

</Menu>

MenuItem reaguje na kliknięcie zdarzeniem Click.

 Wyświetla: tekst (Header), ikonę (Icon), znacznik wyboru (IsChecked – wybranie dodatkowo IsCheckable kliknięcie zmienia stan wyboru), skrót klawiaturowy (InputGestureText – to jest tylko tekstu skrótu, nie zapewnia to obsługi).

ToolBar i StatusBar

<ToolBar DockPanel.Dock="Top">

<Button>New</Button>

<Button>Open</Button>

<Button>Save</Button>

<Separator/>

<Button>Cut</Button>

<Button>Copy</Button>

<Button>Paste</Button>

</ToolBar>

<StatusBar DockPanel.Dock="Bottom">

<Label>Ready</Label>

</StatusBar>

Items Controls – kontrolki elementów

 Pozwalają na wyświetlanie listy wielu elementów.

ListBox

 SelectionMode można ustawić na: Multiple (wybieramy kilka klikając na nich) lub Extended (klikając z Ctrl lub Shift)

<ListBox SelectionMode="Multiple">

<ListBoxItem>jeden</ListBoxItem>

<ListBoxItem>dwa</ListBoxItem>

<ListBoxItem>trzy</ListBoxItem>

<ListBoxItem>cztery</ListBoxItem>

</ListBox>

Na liście można umieszczać też inne elementy:

<ListBox>

<ListBoxItem>

<Image Source="uwaga.png"></Image>

</ListBoxItem>

<ListBoxItem>

<Image Source="error.png"></Image>

</ListBoxItem>

</ListBox>

a nawet:

<ListBox>

<StackPanel Orientation="Horizontal">

<Image Source="uwaga.png" Width="30" Height="30"></Image>

<Label VerticalContentAlignment="Center">uwaga</Label>

</StackPanel>

<StackPanel Orientation="Horizontal">

<Image Source="error.png" Width="30" Height="30"></Image>

<Label VerticalContentAlignment="Center">błąd</Label>

</StackPanel>

</ListBox>

pozwala to stworzyć listę wyboru:

<ListBox SelectionMode="Extended" Name="lista"

SelectionChanged="lst_SelChanged"

CheckBox.Click="lst_SelChanged">

<CheckBox>jeden</CheckBox>

<CheckBox>dwa</CheckBox>

<CheckBox>trzy</CheckBox>

<CheckBox>cztery</CheckBox>

</ListBox>

<Label Name="opis"/>

private void lst_SelChanged(object sender, EventArgs e) { StringBuilder str = new StringBuilder();

foreach (CheckBox item in lista.Items) {

ComboBox

 działa podobnie jak ListBox, ale ukazuje jedynie jeden wybrany element

<ComboBox IsEditable="True">

<ComboBoxItem>jeden</ComboBoxItem>

<ComboBoxItem>dwa</ComboBoxItem>

<ComboBoxItem>trzy</ComboBoxItem>

<ComboBoxItem>cztery</ComboBoxItem>

</ComboBox >

Właściwość IsEditable ustawiona na true pozwala użytkownikowi wprowadzić własną wartość.

Programistyczny dostęp do listy elementów:

<DockPanel Margin="3">

<ToolBar DockPanel.Dock="Top">

<Button Click="Dodaj">Dodaj</Button>

<Button Click="Usuń">Usuń</Button>

</ToolBar>

<ListBox Margin="3" Name="lista"/>

</DockPanel>

private void Dodaj(object sender, RoutedEventArgs e) {

lista.Items.Add(new ListBoxItem { Content="nowy element" });

}

private void Usuń(object sender, RoutedEventArgs e) {

if(lista.SelectedIndex >= 0)

lista.Items.RemoveAt(lista.SelectedIndex);

}

Powiązane dokumenty