Denetimler

Windows Presentation Foundation (WPF), , , , ve gibi neredeyse tüm Windows kullanıcı arabirimi Button Label TextBox Menu bileşenleriyle birlikte ListBox kullanılır. Geçmişte bu nesnelere denetimler dendi. SDK, uygulamada görünür bir nesneyi temsil eden herhangi bir sınıfı gevşek bir şekilde ifade etmek için "denetim" terimini kullanmaya devam ederken, bir sınıfın görünür bir varlığına sahip olmak için sınıftan devralması gerek olmadığını WPF Control unutmayın. sınıfından devralınan sınıflar, bir denetimin tüketicisini yeni bir alt sınıf oluşturmak zorunda kalmadan denetimin görünümünü kökten değiştirmesini sağlayan Control ControlTemplate bir içerir. Bu konuda, denetimlerin (hem sınıftan devralan hem de devralmayanlar) içinde yaygın Control olarak nasıl kullanıldıkları ele alır. WPF

Denetim Örneği Oluşturma

Veya kodu kullanarak bir uygulamaya denetim Extensible Application Markup Language (XAML) eklemek için. Aşağıdaki örnekte, bir kullanıcıdan adını ve soyadını isteyen basit bir uygulamanın nasıl oluşturulup oluşturulup oluşturulamayylı olduğu gösterir. Bu örnek altı denetim oluşturur: içinde iki etiket, iki metin kutusu ve iki XAML düğme. Tüm denetimler benzer şekilde oluşturulabilir.

<Grid>
  <Grid.RowDefinitions>
    <RowDefinition Height="30"/>
    <RowDefinition Height="30"/>
    <RowDefinition Height="30"/>
    <RowDefinition/>
  </Grid.RowDefinitions>
  <Grid.ColumnDefinitions>
    <ColumnDefinition/>
    <ColumnDefinition/>
  </Grid.ColumnDefinitions>

  <Label>
    Enter your first name:
  </Label>
  <TextBox Grid.Row="0" Grid.Column="1" 
           Name="firstName" Margin="0,5,10,5"/>

  <Label Grid.Row="1" >
    Enter your last name:
  </Label>
  <TextBox Grid.Row="1" Grid.Column="1" 
           Name="lastName" Margin="0,5,10,5"/>

  <Button Grid.Row="2" Grid.Column="0" 
          Name="submit" Margin="2">
    View message
  </Button>

  <Button Grid.Row="2" Grid.Column="1" 
          Name="Clear" Margin="2">
    Clear Name
  </Button>
</Grid>

Aşağıdaki örnek, kodda aynı uygulamayı oluşturur. Daha fazla açıklama için , Grid oluşturma grid1 işlemi örnekten dışlandı. grid1 , önceki örnekte gösterildiği gibi aynı sütun ve satır tanımlarını XAML içerir.

Label firstNameLabel;
Label lastNameLabel;
TextBox firstName;
TextBox lastName;
Button submit;
Button clear;

void CreateControls()
{
    firstNameLabel = new Label();
    firstNameLabel.Content = "Enter your first name:";
    grid1.Children.Add(firstNameLabel);

    firstName = new TextBox();
    firstName.Margin = new Thickness(0, 5, 10, 5);
    Grid.SetColumn(firstName, 1);
    grid1.Children.Add(firstName);

    lastNameLabel = new Label();
    lastNameLabel.Content = "Enter your last name:";
    Grid.SetRow(lastNameLabel, 1);
    grid1.Children.Add(lastNameLabel);

    lastName = new TextBox();
    lastName.Margin = new Thickness(0, 5, 10, 5);
    Grid.SetColumn(lastName, 1);
    Grid.SetRow(lastName, 1);
    grid1.Children.Add(lastName);

    submit = new Button();
    submit.Content = "View message";
    Grid.SetRow(submit, 2);
    grid1.Children.Add(submit);

    clear = new Button();
    clear.Content = "Clear Name";
    Grid.SetRow(clear, 2);
    Grid.SetColumn(clear, 1);
    grid1.Children.Add(clear);
}
Private firstNameLabel As Label
Private lastNameLabel As Label
Private firstName As TextBox
Private lastName As TextBox
Private submit As Button
Private clear As Button

Sub CreateControls()
    firstNameLabel = New Label()
    firstNameLabel.Content = "Enter your first name:"
    grid1.Children.Add(firstNameLabel)

    firstName = New TextBox()
    firstName.Margin = New Thickness(0, 5, 10, 5)
    Grid.SetColumn(firstName, 1)
    grid1.Children.Add(firstName)

    lastNameLabel = New Label()
    lastNameLabel.Content = "Enter your last name:"
    Grid.SetRow(lastNameLabel, 1)
    grid1.Children.Add(lastNameLabel)

    lastName = New TextBox()
    lastName.Margin = New Thickness(0, 5, 10, 5)
    Grid.SetColumn(lastName, 1)
    Grid.SetRow(lastName, 1)
    grid1.Children.Add(lastName)

    submit = New Button()
    submit.Content = "View message"
    Grid.SetRow(submit, 2)
    grid1.Children.Add(submit)

    clear = New Button()
    clear.Content = "Clear Name"
    Grid.SetRow(clear, 2)
    Grid.SetColumn(clear, 1)
    grid1.Children.Add(clear)


End Sub

Denetimin Görünümünü Değiştirme

Bir denetimin görünümünü, uygulamanın genel görünümüne uyacak şekilde değiştirmek yaygın bir durum olabilir. Ne yapmak istediğinize bağlı olarak, aşağıdakilerden birini yaparak denetimin görünümünü değiştirebilirsiniz:

  • Denetimin bir özelliğinin değerini değiştirme.

  • Denetim için Style bir oluşturun.

  • Denetim için ControlTemplate yeni bir oluşturun.

Denetimin Özellik Değerini Değiştirme

Birçok denetimin, denetimin nasıl göründüğüne (örneğin, bir ) değiştirmenizi sağlayan Background özellikleri Button vardır. Hem hem de kodunda değer özelliklerini XAML ayarlayabilirsiniz. Aşağıdaki örnek, içinde Background bir üzerinde , ve özelliklerini FontSize FontWeight Button XAML ayarlar.

<Button FontSize="14" FontWeight="Bold">
  <!--Set the Background property of the Button to
    a LinearGradientBrush.-->
  <Button.Background>
    <LinearGradientBrush StartPoint="0,0.5" 
                            EndPoint="1,0.5">
      <GradientStop Color="Green" Offset="0.0" />
      <GradientStop Color="White" Offset="0.9" />
    </LinearGradientBrush>

  </Button.Background>
  View message
</Button>

Aşağıdaki örnek, kodda aynı özellikleri ayarlar.

LinearGradientBrush buttonBrush = new LinearGradientBrush();
buttonBrush.StartPoint = new Point(0, 0.5);
buttonBrush.EndPoint = new Point(1, 0.5);
buttonBrush.GradientStops.Add(new GradientStop(Colors.Green, 0));
buttonBrush.GradientStops.Add(new GradientStop(Colors.White, 0.9));

submit.Background = buttonBrush;
submit.FontSize = 14;
submit.FontWeight = FontWeights.Bold;
Dim buttonBrush As New LinearGradientBrush()
buttonBrush.StartPoint = New Point(0, 0.5)
buttonBrush.EndPoint = New Point(1, 0.5)
buttonBrush.GradientStops.Add(New GradientStop(Colors.Green, 0))
buttonBrush.GradientStops.Add(New GradientStop(Colors.White, 0.9))

submit.Background = buttonBrush
submit.FontSize = 14
submit.FontWeight = FontWeights.Bold

Denetim için Stil Oluşturma

WPF , bir oluşturarak uygulamanın her örneğinde özellikleri ayarlama yerine denetimlerin toplu görünümünü belirtmenizi Style sağlar. Aşağıdaki örnek, Style uygulamanın her biri için uygulanan Button bir oluşturur. Style tanımları genellikle içinde XAML içinde ResourceDictionary tanımlanır, Resources örneğin, özelliğini FrameworkElement .

<Style TargetType="Button">
  <Setter Property="FontSize" Value="14"/>
  <Setter Property="FontWeight" Value="Bold"/>
  <Setter Property="Background">
    <Setter.Value>
      <LinearGradientBrush StartPoint="0,0.5" 
                              EndPoint="1,0.5">
        <GradientStop Color="Green" Offset="0.0" />
        <GradientStop Color="White" Offset="0.9" />
      </LinearGradientBrush>

    </Setter.Value>
  </Setter>
</Style>

Ayrıca stile bir anahtar ataarak ve denetiminizin özelliğinde bu anahtarı belirterek yalnızca belirli bir türün belirli Style denetimlerine stil uygulayabilirsiniz. Stiller hakkında daha fazla bilgi için bkz. Stil oluşturma ve oluşturma.

ControlTemplate Oluşturma

, aynı anda birden çok denetimde özellik ayarlamanızı sağlar, ancak bazen bir oluşturarak bir görünümünü, neler yapanın Style Control ötesinde özelleştirmek istiyor Style olabilir. sınıfından Control devralınan sınıfların yapısını ControlTemplate ve görünümünü tanımlayan bir Control vardır. özelliğinin genel olduğu için varsayılan değerden farklı bir değeri Template Control Control ControlTemplate veserini veabilirsiniz. Bir görünümünü özelleştirmek için ControlTemplate genellikle bir Control denetimden devralmak yerine için yeni bir Control belirtebilirsiniz.

Çok yaygın olan denetimi göz önünde Button bulundurarak. uygulamasının birincil Button davranışı, kullanıcı tıkladığında bir uygulamanın bazı eylemlerde ekleyebilirsiniz. varsayılan olarak , Button içinde yükseltilmiş dikdörtgen olarak WPF görünür. Bir uygulama geliştirirken, düğmenin tıklama olaylarını işerek bir davranışının avantajını elde etmek istiyor, ancak düğmenin özelliklerini değiştirerek düğmenin görünümünü, neler yapaların ötesinde Button değiştirebilirsiniz. Bu durumda, yeni bir ControlTemplate oluşturabilirsiniz.

Aşağıdaki örnek için ControlTemplate bir Button oluşturur. , ControlTemplate yuvarlanmış Button köşeler ve gradyan arka plan ile bir oluşturur. ControlTemplate, iki nesnesi olan bir Border Background LinearGradientBrush GradientStop içerir. GradientStopİlki, özelliğini düğmenin Color arka GradientStop planının rengine bağlamak için veri bağlamayı kullanır. özelliğini ayar Background her Button ayarda, bu değerin rengi ilk olarak GradientStop kullanılır. Veri bağlama hakkında daha fazla bilgi için bkz. Veri Bağlamaya Genel Bakış. Örnek ayrıca, olduğunda Trigger görünümünü değiştirir bir Button IsPressed true oluşturur.

<!--Define a template that creates a gradient-colored button.-->
<Style TargetType="Button">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="Button">
        <Border 
          x:Name="Border"  
          CornerRadius="20" 
          BorderThickness="1"
          BorderBrush="Black">
          <Border.Background>
            <LinearGradientBrush StartPoint="0,0.5" 
                                 EndPoint="1,0.5">
              <GradientStop Color="{Binding Background.Color, 
                    RelativeSource={RelativeSource TemplatedParent}}" 
                            Offset="0.0" />
              <GradientStop Color="White" Offset="0.9" />
            </LinearGradientBrush>
          </Border.Background>
          <ContentPresenter 
            Margin="2"
            HorizontalAlignment="Center"
            VerticalAlignment="Center"
            RecognizesAccessKey="True"/>
        </Border>
        <ControlTemplate.Triggers>
          <!--Change the appearance of
          the button when the user clicks it.-->
          <Trigger Property="IsPressed" Value="true">
            <Setter TargetName="Border" Property="Background">
              <Setter.Value>
                <LinearGradientBrush StartPoint="0,0.5" 
                                     EndPoint="1,0.5">
                  <GradientStop Color="{Binding Background.Color, 
                    RelativeSource={RelativeSource TemplatedParent}}" 
                                Offset="0.0" />
                  <GradientStop Color="DarkSlateGray" Offset="0.9" />
                </LinearGradientBrush>
              </Setter.Value>
            </Setter>
          </Trigger>

        </ControlTemplate.Triggers>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>
<Button Grid.Row="2" Grid.ColumnSpan="2" Name="submitName"
        Background="Green">View message</Button>

Not

BackgroundÖrneğin düzgün Button çalışması için özelliğinin SolidColorBrush bir olarak ayarlanmış olması gerekir.

Olaylara Abone Olmak

veya kodu kullanarak bir denetimin olayına abone XAML olabilirsiniz, ancak bir olayı yalnızca kodda işebilirsiniz. Aşağıdaki örnekte, bir olayına nasıl Click abone olun olduğu Button gösterir.

<Button Grid.Row="2" Grid.ColumnSpan="2" Name="submitName" Click="submit_Click"
  Background="Green">View message</Button>
submit.Click += new RoutedEventHandler(submit_Click);
AddHandler submit.Click, AddressOf submit_Click

Aşağıdaki örnek bir olayı Click ele Button almaktadır.

void submit_Click(object sender, RoutedEventArgs e)
{
    MessageBox.Show("Hello, " + firstName.Text + " " + lastName.Text);
}
Private Sub submit_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
    MessageBox.Show("Hello, " + firstName.Text + " " + lastName.Text)

End Sub

Denetimlerde Zengin İçerik

sınıfından devralınan Control sınıfların çoğu zengin içerik içerme kapasitesine sahiptir. Örneğin, bir Label dize, veya gibi herhangi bir Image nesne Panel içerebilir. Aşağıdaki sınıflar zengin içerik için destek sağlar ve 'daki denetimlerin çoğu için temel sınıflar olarak hareket WPF eder.

Bu temel sınıflar hakkında daha fazla bilgi için bkz. WPF İçerik Modeli.

Ayrıca bkz.