Programowanie aplikacji pod nowy interfejs Windows 8 w C# lub Visual Basic - Przegląd kontrolek  Udostępnij na: Facebook

Autor: Kuba Ostrowski

Opublikowano: 2012-04-17

Kontrolka jest elementem interfejsu użytkownika. Odpowiada za komunikację między programem a odbiorcą, poprzez odpowiednie reagowanie na odbierane komunikaty, takie jak: zmiana rozmiaru, kliknięcie przycisku myszki itp. Tworząc aplikację można wykorzystać kontrolki dostępne w Visual Studio lub utworzyć własne. W tym artykule zostaną przedstawione ważniejsze kontrolki dostępne w Visual Studio 2011.

Kontrolki, dziedziczenie

Kontrolki dziedziczone są po paru wspólnych typach, co zapewnia im te same właściwości oraz odpowiednie reagowanie na zdarzenia zachodzące w systemie.

Hierarchia dziedziczenia

System.Object

  System.Windows.Threading.DispatcherObject

    System.Windows.DependencyObject

      System.Windows.Media.Visual

        System.Windows.UIElement

          System.Windows.FrameworkElement

Ponieważ często będziemy korzystali z właściwości odziedziczonych z klasy System.Windows.UIElement oraz System.Windows.FrameworkElement, tworząc kontrolki, bardzo łatwo będzie można zauważyć podobieństwo między nimi.

Użyteczne właściwości System.Windows.UIElement
  • IsHitTestVisible – ustawia/pobiera wartość typu bool, określającą, czy kontrolka jest wrażliwa na test trafienia,
  • Visibility – ustawia/pobiera wartość z wyliczenia Visibility (Visible, Collapsed). Określa, czy kontrolka jest widoczna,
  • Opacity – ustawia/pobiera współczynnik przezroczystości kontrolki w granicach 0.0 – 1.0,
  • RenderTransform – ustawia/pobiera transformację, zaaplikowaną kontrolce podczas wyświetlania.

 

Użyteczne właściwości System.Windows.FrameworkElement
  • ActualHeight – pobiera aktualną wysokość wyświetlonej kontrolki,
  • ActualWidth – pobiera aktualną szerokość wyświetlonej kontrolki,
  • Height – ustawia/pobiera sugerowaną wartość wysokości,
  • Width – ustawia/pobiera sugerowaną wartość szerokości,
  • Margin – ustawia/pobiera zewnętrzny margines,
  • Name – ustawia/pobiera nazwę obiektu, za pomocą której możemy odwoływać się do kontrolki w kodzie aplikacji,
  • Resources – ustawia/pobiera zasoby kontrolki, które możemy wykorzystywać np. do przechowywania dowiązanych danych,
  • HorizontalAlignment – ustawia/pobiera wyrównanie pozycji obiektu w poziomie,
  • VerticalAlignment – ustawia/pobiera wyrównanie pozycji obiektu w pionie.

Wyświetlanie tekstu

Kontrolki do wyświetlania tekstu są najmniej skomplikowanymi typami wywodzącymi się bezpośrednio z FrameworkElement.

TextBlock – podstawowy typ do wyświetlania tekstu:

<TextBlock Width="100" Height="20" Text="Tekst"/>

RichTextBlock – wyświetla tekst formatowany, najczęściej za pomocą znaczników <Paragraph> oraz <Run>:

<RichTextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Width="100" >
            <Paragraph FontWeight="ExtraBold" FontSize="32">
                tekst1
            </Paragraph>
            <Paragraph Foreground="Red" FontSize="11">
                tekst2
            </Paragraph>
 </RichTextBlock>

Edycja tekstu

TextBox – podstawowy typ do manipulacji tekstem wyświetlanym na ekranie. Domyślny tekst można ustawić za pomocą właściwości Text, natomiast format wpisywanych danych - przy użyciu InputScope:

<TextBox Width="100" Height="20" />

PasswordBox – kontrolka umożliwiająca wpisywanie hasła przez użytkownika. Wpisywana zawartość wyświetlana jest za pomocą znaczków, gdzie rodzaj znaku ustalony jest przez właściwości PasswordChar. Hasło w kodzie można otrzymać poprzez właściwość Password:

<PasswordBox PasswordChar="*" Width="100" Height="20"/>

Przyciski

To kontrolki wywodzące się z klasy ButtonBase. Ich głównym zadaniem jest obsługa zdarzenia Click. Dzięki obecności w łańcuchu dziedziczenia ContentControl, potrafią wyświetlać dodatkową zawartość za pomocą właściwości Content.

Button – podstawowy przycisk:

<Button Width="200" Height="60" Content="Dodatkowa_Zawartość"
                      Click="Zdarzenie"/>

RepeatButton – ten typ przycisku wywołuje zdarzenie Click, gdy trzymamy na nim wciśnięty klawisz myszy co ilość milisekund, podaną we właściwości Interval:

<RepeatButton Width="200" Height="60" Content="Dodatkowa_Zawartość"
                      Click="Zdarzenie" Delay="10" Interval="100"/>

ToggleButton – przycisk zmiany stanu:

<ToggleButton Width="200" Height="60" Content="Dodatkowa_Zawartość" Click="Zdarzenie" />

HyperlinkButton – przycisk aplikacji do wyświetlania hiperłącza:

<HyperlinkButton Width="200" Height="60" Content="Dodatkowa_Zawartość"  Click="Zdarzenie"/>

Kontrolki umożliwiające wybór

ToggleSwitch –  służy do przełączania między dwoma stanami:

<ToggleSwitch OffContent="nie/tak"/>

CheckBox – kontrolka do wyboru opcjonalnych składników:

<CheckBox  Content="zaznacz"/>

RadioButton – służy do wyboru jednej opcji z wielu. W zasięgu danego kontenera może być zaznaczony tylko jeden, chyba że zostały pogrupowane za pomocą właściwości GroupName:

<RadioButton Content="zaznacz"/>

ComboBox – pozwala wybrać dowolny element z rozwijanej listy. Kolekcja elementów przyjmuje każdy typ wywodzący się z System.Object:

<ComboBox Width="200" Height="40">
            <ComboBoxItem Content="tekst1"/>
            <ComboBoxItem Content="tekst2"/>
            <ComboBoxItem Content="tekst3"/>
</ComboBox>

ListBox – idealnie nadaje się do wyboru i przeglądania dużej ilości danych, np. nagłówków, czytanych newsów. Przyjmuje typy wywodzące się z System.Object. Ten typ stosuje się najczęściej, dowiązując do niego dane za pomocą właściwości ItemResource:

<ListBox Width="100">
            <ListBoxItem Content="tekst1"/>
            <ListBoxItem Content="tekst2"/>
            <ListBoxItem Content="tekst3"/>
</ListBox>

Slider – pozwala wybrać wartość z ograniczonego przedziału za pomocą tzw. paska stanu:

<Slider Width="200" Maximum="100"  Minimum="0" Value="30" />

Paski postępu

ProgressBar – ukazuje postęp za pomocą tzw. paska stanu, który można przełączyć na animacje oczekiwania przy pomocy właściwości IsIndeterminate:

<ProgressBar Width="200" Value="30" />

ProgressRing – wyświetla na ekranie animacje oczekiwania w postaci kółeczek poruszających się po pierścieniu:

<ProgressRing  Width="200" IsActive="True"/>

Wyświetlanie multimediów

Image – pozwala na wyświetlenie obrazu:

<Image Width="300" Height="300" Source="ścieżka.ext"/>

MediaElement – odtwarza pliki wideo oraz audio:

<MediaElement Width="640" Height="480" Source="ścieżka.ext"/>

MediaPlayer – odtwarza pliki wideo lub audio oraz zezwala na kontrolę nad odtwarzanymi multimediami:

<MediaPlayer Source="scieżka.ext"/>

Rysowanie za pomocą kształtów

Typy przeznaczone do rysowania znajdują się w przestrzeni System.Windows.Shapes. Dziedziczą wiele właściwości i są w pełni podatne na zdarzenia, jak każda inna kontrolka. Niestety, są dość obciążające i nie należy ich nadużywać.

Przykład użycia kształtów:

<Rectangle Width="200" Height="100" Fill="Red"/>
<Ellipse Width="100" Height="200" Fill="CornflowerBlue"/>
<Line X1="100" Y1="100" X2="500" Y2="500" StrokeThickness="10" Stroke="Red" />
<Polyline Points="100 100 200 300 500 200" StrokeThickness="10" Stroke="Aqua"/>
<Polygon Points="500 300 400 100 600 100" Fill="Green" />

Kolekcje kontrolek

Budowanie atrakcyjnego interfejsu nie byłoby możliwe, gdyby nie typy umożliwiające zarządzanie kontrolkami. Typy służące za kolekcje kontrolek możemy podzielić na wywodzące się z:

—  System.Windows.Controls.Panel – służą do pozycjonowania kontrolek w interfejsie,

—  System.Windows.Controls.ContentControl oraz Windows.UI.Xaml.Controls.ItemsControl – przeznaczone są do manipulacji zawartością w trakcie pracy programu, np. przewijania danych na ekranie.

Grid – najbardziej uniwersalny ze wszystkich paneli, który pozwala na tworzenie oddzielnych kolumn i wierszy do pozycjonowania elementów:

<Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="200"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="200"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
//zawartość
</Grid>

StackPanel – panel służący do wyświetlania kontrolek ustawionych w pionie lub poziomie, jedna za drugą:

<StackPanel Orientation="Horizontal" >
       //zawartość
</StackPanel>

Canvas – służy do pozycjonowania zawartości względem lewego górnego rogu panelu:

<Canvas Width="350" Height="350">
    <Rectangle 
        Canvas.Top="25" 
        Canvas.Left="25" 
        Fill="Red" 
        Height="100" 
        Width="100"/>
</Canvas>

ItemsControl – wyświetla dowiązane dane według określonego szablonu:

<ItemsControl ItemsSource="źródło_danych">
               <ItemsControl.ItemTemplate>
                   <DataTemplate>
                       //szablon
                   </DataTemplate>
               </ItemsControl.ItemTemplate>
</ItemsControl>

ScrollViewer – umożliwia przewijanie kontrolki nie mieszczącej się w granicach strony:

<ScrollViewer ZoomMode="Enabled"MinZoomFactor="1.0" MaxZoomFactor="10.0">
       //kontrolka
</ScrollViewer>

FlipView – umożliwia przełączanie zawartości w trakcie pracy programu:

<FlipView Width="350" Height="150">
    <FlipViewItem>
        <TextBox Text="tekst1" Width="100" Height="30" />    
    </FlipViewItem>
    <FlipViewItem>
        <TextBox Text="tekst2" Width="100" Height="30" />
   </FlipViewItem>
</FlipView>

AppBar

Aplikacja może posiadać pasek dolny i górny, na których można rozmieszczać kontrolki. Paski idealnie nadają się do wspomagania nawigacji pomiędzy stronami:

<Page.BottomAppBar>
    <AppBar Padding="10,0,10,0">
        <Grid>
            <Button Click="GoHome" HorizontalAlignment="Left" 
                    IsEnabled="{Binding Frame.CanGoBack, ElementName=pageRoot}"  
                    Style="{StaticResource HomeAppBarButtonStyle}"/>
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
                <Button IsEnabled="{Binding CanFlipPrevious}" Click="PreviousButton_Click" 
                        Style="{StaticResource PreviousAppBarButtonStyle}"/>
                <Button IsEnabled="{Binding CanFlipNext}" Click="NextButton_Click" 
                        Style="{StaticResource NextAppBarButtonStyle}"/>
            </StackPanel>
        </Grid>
    </AppBar>
</Page.BottomAppBar>