Aracılığıyla paylaş


Giriş Genel Bakış

Windows Presentation Foundation (WPF) Bir alt sistem sağlar güçlü API çeşitli aygıtlardan giriş almak için fare, klavye, dokunmatik ve Stilus dahil. Bu konu, tarafından sağlanan hizmetleri açıklar WPF ve açıklar mimarisi, giriş sistemleri.

Bu konu aşağıdaki bölümleri içerir.

  • API giriş
  • Olay yönlendirmesi
  • Giriş olaylarını işlemek
  • Text Input
  • Touch and Manipulation
  • Focus
  • Fare konumu
  • Fare yakalama
  • Commands
  • Giriş sistemi ve ana elemanları
  • What's Next
  • İlgili Konular

API giriş

Birincil giriş API Pozlama üzerinde temel öğe sınıfları bulundu: UIElement, ContentElement, FrameworkElement, and FrameworkContentElement. Temel öğeleri hakkında daha fazla bilgi için bkz: Temel Öğelere Genel Bakış. Bu sınıflar, tuş, fare düğmelerini, fare tekerleği, fare hareketi, odak yönetimi ve fare yakalama, birkaçını ilgili giriş olaylar için işlevsellik sağlar. Giriş koyarak API temel öğeleri üzerinde değerlendirmesini yerine tüm olayların bir hizmet olarak giriş, giriş mimarisi, belirli bir nesne kullanıcı arabiriminde kaynaklanan ve birden fazla öğe Giriş bir olayı işlemek için bir fırsat vardır alınabildiği bir olay yönlendirme düzeni desteklemek için giriş olayları sağlar. Birçok giriş olayları kendileri ile ilikili olaylar çifti vardır. Örneğin, olay tuşunu ilişkili olduğu KeyDown ve PreviewKeyDown olayları. Bu olaylar içinde oldukları için hedef öğe nasıl yönlendirilir farktır. Önizleme olayları tünel kök öğesi öğesi ağaçtan hedef öğe için aşağı. Köpürme olaylar kabarcık yukarı hedef öğeden kök öğesi için. Olay yönlendirme WPF daha ayrıntılı olarak daha sonra bu genel bakış ve de ele Yönlendirilmiş Olaylara Genel Bakış.

Klavye ve fare sınıfları

Giriş ek olarak API temel öğe sınıfları üzerinde Keyboard sınıfı ve Mouse sınıfları sağlamak ek API çalışma ile klavye ve fare giriş.

Giriş örnekleri API , Keyboard sınıfın Modifiers verir özelliği ModifierKeys şu anda basıldı ve IsKeyDown yöntemi, belirtilen anahtar basılı olup olmadığını belirler.

Aşağıdaki örnek GetKeyStates yöntemini belirlemek için bir Key olan aşağı durumu.

            ' Uses the Keyboard.GetKeyStates to determine if a key is down.
            ' A bitwise AND operation is used in the comparison. 
            ' e is an instance of KeyEventArgs.
            If (Keyboard.GetKeyStates(Key.Return) And KeyStates.Down) > 0 Then
                btnNone.Background = Brushes.Red
// Uses the Keyboard.GetKeyStates to determine if a key is down.
// A bitwise AND operation is used in the comparison. 
// e is an instance of KeyEventArgs.
if ((Keyboard.GetKeyStates(Key.Return) & KeyStates.Down) > 0)
{
    btnNone.Background = Brushes.Red;
}

Giriş örnekleri API , Mouse sınıfın MiddleButton, orta fare düğmesiyle durumunu alır ve DirectlyOver, fare işaretçisini öğenin alır şu anda üzerinde.

Aşağıdaki örnek belirler mi LeftButton fare üzerinde bulunan Pressed durumu.

            If Mouse.LeftButton = MouseButtonState.Pressed Then
                UpdateSampleResults("Left Button Pressed")
            End If
if (Mouse.LeftButton == MouseButtonState.Pressed)
{
    UpdateSampleResults("Left Button Pressed");
}

Mouse Ve Keyboard sınıfları kapsamında daha ayrıntılı bu genel bakış.

Stilus giriş

WPFdestek için tümleşik Stylus. Stylus Yaygın olarak yapılan bir kalem girişi olan Tablet PC. WPFuygulamalar kabul stylus fare fareyi kullanarak API, ama WPF de, klavye ve benzer bir modeli kullanmak Stilus aygıt soyutlama sergilerfare. Tüm stylus ile ilgili APIs "Stylus" sözcüğünü içeren.

Stilus fare davranabilir çünkü yalnızca fare giriş destekleyen uygulamalar hala bazı Stilus destek düzeyini otomatik olarak elde edebilirsiniz. Stilus böyle bir şekilde kullanıldığında, uygulama uygun Stilus olayý iþlemek için fırsat verilir ve karşılık gelen fare olayını işler. Buna ek olarak, mürekkep giriş gibi üst düzey hizmetler de Stilus aygıt soyutlama kullanılabilir. Giriş olarak mürekkep hakkında daha fazla bilgi için bkz: Mürekkebe Giriş.

Olay yönlendirmesi

A FrameworkElement , içerik modeli ağacı oluşturma alt öğeler olarak diğer öğeleri içerebiliröğeleri. De WPF, üst öğe giriş yönlendirilmiş alt öğeleri veya diğer bağımlıları tarafından katılmakişleme olayları. Bu denetimler küçük denetimlerinden "Denetim kompozisyon" bilinen bir işlem oluşturmak için özellikle kullanışlıdır ya da "birleştirme." Öğe ağaçları ve olay yolları öğesi ağaçları ilişkileri hakkında daha fazla bilgi için bkz: WPF içinde ağaçlar.

Belirli nesne veya öğe yol boyunca farklı bir öğe tarafından kaynaklanan bir olay (işleme) yoluyla önemli bir yanıt sunmak seçebilmeniz için olay yönlendirmesi, olayları, birden çok öğe için iletme işlemidir. Yönlendirilmiş üç yönlendirme mekanizmaları birini olayları kullanın: doğrudan köpürme ve tünel. Doğrudan yönlendirme, kaynak öğesinde bildirim tek öğedir ve olay için diğer öğeleri yönlendirilmez. Ancak, doğrudan yönlendirilmiş olay yalnızca standart karşıt olarak yönlendirilmiş olaylar için var olan bazı ek özellikleri hala sunar CLR olayları. Köpürme, öğe ağacı ilk olay sonra kaynaklanan öğesi üst öğe vb. bildirerek çalışır. Tünel, öğe ağacı kökünde başlar ve aşağı, özgün kaynak öğesi ile biten çalışır. For more information about routed events, see Yönlendirilmiş Olaylara Genel Bakış.

WPFGiriş olaylar genellikle bir tünel olayı ve köpürme olay oluşan çiftler halinde gelir. Köpürme olaylarından "Önizleme" tünel olayları ayırt edici önek. Örneğin, PreviewMouseMove Tünel fare taşıma olayı sürümüdür ve MouseMove köpürme sürümü bu olay. Bu olay öğe düzeyinde uygulanır ve içerdiği bir yeteneğini değil bir kuralı oluşturmasıdır WPF olay sistem. wpf giriş olaylar bölümünde ayrıntılı bilgi için bkz: Yönlendirilmiş Olaylara Genel Bakış.

Giriş olaylarını işlemek

Öğe üzerindeki giriş almak için bir olay işleyicisi belirli bir olay ile ilişkilendirilmiş olması gerekir. De XAML Bu basittir: olay adı, bu olay için dinleme öğenin nitelik olarak başvuru. Sonra bir temsilci üzerinde dayalı tanımlayan olay işleyicisi adını özniteliğinin değerini ayarlayın. Olay işleyicisini kod gibi yazılmalıdır C# ve dahil edilir arka planda dosya.

İşletim sistemi, klavye odağı bir öğe üzerinde çalışırken oluşan anahtar eylemler bildirdiğinde klavye olayları oluşur. Fare ve Stilus olayları her iki kategoriye ayrılır: öğenin göreli olarak işaretçi konumunu rapor değiştiren olaylar ve aygıt düğmeleri durumunda raporu değişir olaylar.

Klavye giriş olay örnek

Aşağıdaki örnek, bir sol ok tuşu için dinler. A StackPanel , oluşturulmuş olan bir Button. Sol Ok tuşu bağlı olduğu için dinlemek için bir olay işleyicisi Button örneği.

İlk bölümü örnek oluşturur StackPanel ve Button ve olay işleyicisi ekler KeyDown.

<StackPanel>
  <Button Background="AliceBlue"
          KeyDown="OnButtonKeyDown"
          Content="Button1"/>
</StackPanel>
            ' Create the UI elements.
            Dim keyboardStackPanel As New StackPanel()
            Dim keyboardButton1 As New Button()

            ' Set properties on Buttons.
            keyboardButton1.Background = Brushes.AliceBlue
            keyboardButton1.Content = "Button 1"

            ' Attach Buttons to StackPanel.
            keyboardStackPanel.Children.Add(keyboardButton1)

            ' Attach event handler.
            AddHandler keyboardButton1.KeyDown, AddressOf OnButtonKeyDown
// Create the UI elements.
StackPanel keyboardStackPanel = new StackPanel();
Button keyboardButton1 = new Button();

// Set properties on Buttons.
keyboardButton1.Background = Brushes.AliceBlue;
keyboardButton1.Content = "Button 1";

// Attach Buttons to StackPanel.
keyboardStackPanel.Children.Add(keyboardButton1);

// Attach event handler.
keyboardButton1.KeyDown += new KeyEventHandler(OnButtonKeyDown);

İkinci bölümde kodunda yazılmış ve olay işleyicisini tanımlar. Ne zaman sol ok tuşu basılı olduğundan ve Button klavye odaklanmış, iþleyicisi çalýþýr ve Background rengini Button değişti. Tuşa bastığınızda, ancak sol ok tuşu değil Background rengini Button değiştirildiğinde dön başlangıç kendi renk.

        Private Sub OnButtonKeyDown(ByVal sender As Object, ByVal e As KeyEventArgs)
            Dim source As Button = TryCast(e.Source, Button)
            If source IsNot Nothing Then
                If e.Key = Key.Left Then
                    source.Background = Brushes.LemonChiffon
                Else
                    source.Background = Brushes.AliceBlue
                End If
            End If
        End Sub
private void OnButtonKeyDown(object sender, KeyEventArgs e)
{
    Button source = e.Source as Button;
    if (source != null)
    {
        if (e.Key == Key.Left)
        {
            source.Background = Brushes.LemonChiffon;
        }
        else
        {
            source.Background = Brushes.AliceBlue;
        }
    }
}

Fare giriş olay örnek

Aşağıdaki örnekte, Background rengini bir Button Fare işaretçisini girdiğinde değişmiş Button. Background Fare çıktığında renk geri Button.

İlk bölümü örnek oluşturur StackPanel ve Button kontrol ve olay işleyicileri için ekler MouseEnter ve MouseLeave olayları Button.

<StackPanel>
  <Button Background="AliceBlue"
          MouseEnter="OnMouseExampleMouseEnter"
          MouseLeave="OnMosueExampleMouseLeave">Button

  </Button>
</StackPanel>
            ' Create the UI elements.
            Dim mouseMoveStackPanel As New StackPanel()
            Dim mouseMoveButton As New Button()

            ' Set properties on Button.
            mouseMoveButton.Background = Brushes.AliceBlue
            mouseMoveButton.Content = "Button"

            ' Attach Buttons to StackPanel.
            mouseMoveStackPanel.Children.Add(mouseMoveButton)

            ' Attach event handler.
            AddHandler mouseMoveButton.MouseEnter, AddressOf OnMouseExampleMouseEnter
            AddHandler mouseMoveButton.MouseLeave, AddressOf OnMosueExampleMouseLeave
// Create the UI elements.
StackPanel mouseMoveStackPanel = new StackPanel();
Button mouseMoveButton = new Button();

// Set properties on Button.
mouseMoveButton.Background = Brushes.AliceBlue;
mouseMoveButton.Content = "Button";

// Attach Buttons to StackPanel.
mouseMoveStackPanel.Children.Add(mouseMoveButton);

// Attach event handler.
mouseMoveButton.MouseEnter += new MouseEventHandler(OnMouseExampleMouseEnter);
mouseMoveButton.MouseLeave += new MouseEventHandler(OnMosueExampleMouseLeave);

Örnek ikinci bölümü kodunda yazılmış ve olay iþleyicilerini tanýmlar. Fare girdiğinde Button, Background rengini Button için değişti SlateGray. Fareyi bıraktığında Button, Background rengini Button başa değişti AliceBlue.

        Private Sub OnMouseExampleMouseEnter(ByVal sender As Object, ByVal e As MouseEventArgs)
            ' Cast the source of the event to a Button.
            Dim source As Button = TryCast(e.Source, Button)

            ' If source is a Button.
            If source IsNot Nothing Then
                source.Background = Brushes.SlateGray
            End If
        End Sub
private void OnMouseExampleMouseEnter(object sender, MouseEventArgs e)
{
    // Cast the source of the event to a Button.
    Button source = e.Source as Button;

    // If source is a Button.
    if (source != null)
    {
        source.Background = Brushes.SlateGray;
    }
}
        Private Sub OnMosueExampleMouseLeave(ByVal sender As Object, ByVal e As MouseEventArgs)
            ' Cast the source of the event to a Button.
            Dim source As Button = TryCast(e.Source, Button)

            ' If source is a Button.
            If source IsNot Nothing Then
                source.Background = Brushes.AliceBlue
            End If
        End Sub
private void OnMosueExampleMouseLeave(object sender, MouseEventArgs e)
{
    // Cast the source of the event to a Button.
    Button source = e.Source as Button;

    // If source is a Button.
    if (source != null)
    {
        source.Background = Brushes.AliceBlue;
    }
}

Text Input

TextInput Olay sağlar dinlemek için metin girişi bir aygıttan bağımsız bir şekilde. Klavye metin girdi, ancak konuşma, el yazısı birincil yoludur ve diğer giriş aygıtları da giriş metin oluşturabilirsiniz.

Klavye girişi, WPF önce gönderir uygun KeyDown/KeyUp olayları. Söz konusu olaylar değil işlenir ve anahtar (tek yönlü oklar gibi bir denetim anahtarı) veya işlev tuşları yerine metinsel ise daha sonra bir TextInput olay ortaya. Yok her zaman arasında basit bir bire bir eşleme KeyDown/KeyUp ve TextInput olayları çünkü birden fazla tuş vuruşlarını tek bir karakter metin girdi oluşturabilir ve tek tuş vuruşlarını üretebilir dizeleri multi-character. Bu kullanan diller için Çince, Japonca ve Korece gibi özellikle doğrudur Input Method Editors (IMEs) binlerce ilgili kendi alfabelere olası karakteri oluşturmak için

Zaman WPF gönderen bir KeyUp/KeyDown olay, Key olarak ayarlanır Key.System tuş vuruşlarını parçası haline, bir TextInput (alt + s, örneğin basılırsa) olay. Kodu, böylece bir KeyDown denetlemek için olay işleyicisi Key.System ve eğer bulundu, bırakın işleyicisi Kabarık sonradan işlenmek TextInput olay. Bu durumda, çeşitli özelliklerini TextCompositionEventArgs bağımsız değişkeni kullanılabilir belirleme özgün bir tuş vuruşları. Benzer şekilde, bir IME etkin, Key değeri olan Key.ImeProcessed, ve ImeProcessedKey verir özgün tuş veya tuş vuruşları.

Aşağıdaki örnek için bir işleyici tanımlar Click için bir işleyici ve olayı KeyDown olay.

İlk parça kod veya biçimlendirme kullanıcı arabirimi oluşturur.

<StackPanel KeyDown="OnTextInputKeyDown">
  <Button Click="OnTextInputButtonClick"
          Content="Open" />
  <TextBox> . . . </TextBox>
</StackPanel>
            ' Create the UI elements.
            Dim textInputStackPanel As New StackPanel()
            Dim textInputeButton As New Button()
            Dim textInputTextBox As New TextBox()
            textInputeButton.Content = "Open"

            ' Attach elements to StackPanel.
            textInputStackPanel.Children.Add(textInputeButton)
            textInputStackPanel.Children.Add(textInputTextBox)

            ' Attach event handlers.
            AddHandler textInputStackPanel.KeyDown, AddressOf OnTextInputKeyDown
            AddHandler textInputeButton.Click, AddressOf OnTextInputButtonClick
// Create the UI elements.
StackPanel textInputStackPanel = new StackPanel();
Button textInputeButton = new Button();
TextBox textInputTextBox = new TextBox();
textInputeButton.Content = "Open";

// Attach elements to StackPanel.
textInputStackPanel.Children.Add(textInputeButton);
textInputStackPanel.Children.Add(textInputTextBox);

// Attach event handlers.
textInputStackPanel.KeyDown += new KeyEventHandler(OnTextInputKeyDown);
textInputeButton.Click += new RoutedEventHandler(OnTextInputButtonClick);

İkinci kod parçası, olay işleyicileri içerir.

        Private Sub OnTextInputKeyDown(ByVal sender As Object, ByVal e As KeyEventArgs)
            If e.Key = Key.O AndAlso Keyboard.Modifiers = ModifierKeys.Control Then
                handle()
                e.Handled = True
            End If
        End Sub

        Private Sub OnTextInputButtonClick(ByVal sender As Object, ByVal e As RoutedEventArgs)
            handle()
            e.Handled = True
        End Sub

        Public Sub handle()
            MessageBox.Show("Pretend this opens a file")
        End Sub
private void OnTextInputKeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.O && Keyboard.Modifiers == ModifierKeys.Control)
    {
        handle();
        e.Handled = true;
    }
}

private void OnTextInputButtonClick(object sender, RoutedEventArgs e)
{
    handle();
    e.Handled = true;
} 

public void handle()
{
    MessageBox.Show("Pretend this opens a file");
}

Çünkü olay rotasını oluşturan giriş olaylar kabarcık StackPanel Giriş hangi öğenin ne olursa olsun var. klavye odağı alır TextBox Denetim önce bildirilir ve OnTextInputKeyDown yalnızca yoksa işleyici adlı TextBox değil ele girdi. PreviewKeyDown Olay yerine kullanılan KeyDown olay, OnTextInputKeyDown işleyicisi ilk denir.

Bu örnekte, iki kez işleme mantığı yazılır — bir kez ctrl + o ve yeniden düğmesinin tıklatma olay. Bu komutları kullanarak doğrudan giriş olaylarını işlemek yerine basitleştirilebilir. Bu genel bakış ve de komutlar açıklanmıştır Komut Verme Genel Başış.

Touch and Manipulation

Yeni donanım ve API Windows 7 işletim sisteminde uygulama giriş aynı anda birden fazla dokunuşları alma yeteneği sağlar. WPFalgılamak ve fare veya klavye gibi diğer giriş için dokunma oluştuğunda olayları yükselterek yanıt için benzer bir şekilde dokunma yanıtlamasını uygulamaları etkinleştirir.

WPFiki tür dokunma gerçekleştiğinde olay sunar: dokunma olayları ve hareket ettirme olayları. Dokunma olayları ham veri hakkında her parmak dokunmatik ve hareketi sağlamak. Düzenlemesi olayları giriş belirli eylemler olarak yorumlar. Her iki türdeki olayları, bu bölümde ele alınmıştır.

Prerequisites

Dokunmatik yanıt veren bir uygulama geliştirmek için aşağıdaki bileşenler gerekir.

  • Microsoft Visual Studio 2010.

  • Windows 7.

  • Windows Touch'ı destekleyen bir dokunmatik ekran gibi bir aygıt.

Terminology

Dokunma açıklanan aşağıdaki terimler kullanılır.

  • Dokunma Windows 7 tarafından tanınan kullanıcı giriş türüdür. Genellikle, bir dokunmatik ekranda fingers yerleştirerek dokunma başlatılır. Aygıt, finger'ın konumu ve fare giriş taşıması yalnızca dönüştürürse dizüstü bilgisayarlarda kullanılan touchpad gibi aygıtlar dokunma desteklemeyen unutmayın.

  • Çoklu dokunma aynı anda birden fazla noktadan oluşan dokunma olur. Windows 7 ve WPF destekleyen çoklu dokunma. Zaman dokunma açıklanan belgelerine WPF, kavramları uygulamak için çoklu dokunma.

  • A düzenlemesi dokunmatik bir nesneye uygulanan fiziksel bir eylem olarak yorumlanan oluşur. De WPF, hareket ettirme olayları yorumlamak giriş çevirisi, genişletme, veya dönüş düzenlemesi.

  • A touch device Dokunma girişi, dokunmatik ekranı tek bir parmak gibi üreten bir aygıtı temsil eder

Yanıt denetimleri

Aşağıdaki denetimleri, Görünüm dışına kayması içerik varsa, bir parmak denetim sürükleyerek kaydırılabileceği.

ScrollViewer Tanımlar ScrollViewer.PanningMode dokunma kaydırma etkinleştirilip etkinleştirilmediği yatay, dikey, hem de veya hiçbiri belirtmenizi sağlar özelliği bağlı. ScrollViewer.PanningDeceleration Özelliği belirtir ne kadar hızlı kaydırma yavaşlar, kullanıcı kaldırdığında parmak dokunmatik ekran. ScrollViewer.PanningRatio Bağlı özellik çevirmek Kaydırma uzaklığını oranını belirtirdüzenlemesi uzaklık.

Olayların dokunma

Temel sınıflar, UIElement, UIElement3D, ve ContentElement, olaylara abone olduğunuz için böylece uygulamanız için yanıt tanımlamakdokunma. Uygulamanızın dokunma nesne işleme dışında bir şey olarak yorumlarken dokunma olayları yararlıdır. Örneğin, kullanıcının bir veya daha fazla parmağınızla çizmek sağlayan bir uygulama olayları dokunma abone.

Tüm üç sınıfları tanımlayan sınıfı ne olursa olsun aynı şekilde davranır olayları tanımlar.

Klavye ve fare olayları gibi yönlendirilmiş olayların dokunma olaylardır. İle başlayan olayları Preview olaylar ve olayları ile başlayan tünel Touch olan köpürme olayları. For more information about routed events, see Yönlendirilmiş Olaylara Genel Bakış. Bu olayları işlemek, herhangi bir öğenin göreli olarak giriş konumunu çağırarak alabileceğiniz GetTouchPoint veya GetIntermediateTouchPoints yöntemi.

Dokunma olaylar arasındaki etkileşimi anlamak için burada bir kullanıcı bir öğeyi tek bir parmak koyar, finger öğesinde taşır ve finger öğeden kaldırdığında senaryo düşünün. Köpürme olayları (Tünel olayları diye atlanır) yürütülmesini aşağıda gösterilmiştir.

Olayların dokunma

Dokunma olayları dizisi.

Aşağıdaki listede önceki çizimde olay sırasını açıklar.

  1. TouchEnter Olay ortaya bir kez ne zaman kullanıcı koyar finger öğesi.

  2. TouchDown Olayı oluşur bir saat.

  3. TouchMove Olay ortaya birden çok kez gibi kullanıcı hareket içinde fingeröğe.

  4. TouchUp Olay ortaya bir kez ne zaman kullanıcı kaldırdığında finger öğesi.

  5. TouchLeave Olayı oluşur bir saat.

İkiden fazla fingers kullanıldığında, her parmak için olaylar oluşur.

Düzenlemesi olayları

Burada bir uygulamayı etkinleştirir bir nesneyi işlemek için servis taleplerini UIElement sınıfı tanımlar düzenlemesi olayları. Sadece dokunmatik konumunu rapor dokunma olaylarının tersine, giriş nasıl yorumlanabilir düzenlemesi olaylarını bildir. Üç tür düzenlemeleriyle, çeviri, genişleme ve dönüş vardır. Aşağıdaki listede, düzenlemeleriyle üç tür çağırmak açıklar.

  • Bir nesne üzerinde bir parmak koymak ve çeviri düzenlemesi çağırmak için dokunmatik ekran üzerinde parmak taşıyın. Bu genellikle nesneyi taşır.

  • Bir nesne üzerinde iki fingers koyun ve fingers daha yakın birlikte veya bir başkasına genişletme düzenlemesi çağırmak dışında uzağına taşıyın. Bu genellikle nesneyi yeniden boyutlandırır.

  • Bir nesne üzerinde iki fingers koyun ve fingers birbirine dönüş düzenlemesi çağırmak için etrafında döndürün. Bu genellikle nesneyi döndürür.

İşleme birden fazla türde aynı anda ortaya çıkabilir.

Nesneler için düzenlemeleriyle yanıt neden olduğunda, eylemsizlik görünüyor nesnesi olabilir. Bu nesneleriniz fiziksel dünyada benzetimini yapabilirsiniz. Sabit bildirme, bir tablo üzerinde kitap bastığınızda, yeterince kitap serbest sonra taşımak devam edecektir. WPFBu davranış, kullanıcının fingers yayımlandıktan sonra nesneyi düzenlemesini olayları yükselterek benzetimini yapmak sağlar.

Taşıma, yeniden boyutlandırma ve bir nesneyi döndürmek kullanıcı sağlayan bir uygulama oluşturma hakkında daha fazla bilgi için bkz: İzlenecek Yol: İlk Dokunmatik Uygulamanızı Oluşturma.

UIElement Tanımlar aşağıdaki düzenleme olayları.

Varsayılan olarak, bir UIElement alma bu işleme olayları. Düzenlemesi olayları almak için bir UIElement, set UIElement.IsManipulationEnabled için true.

Düzenlemesi olayları yürütme yolu

Bir kullanıcı burada "atar" bir senaryo düşünün. bir nesne. Taşır finger kısa bir mesafe için dokunmatik ekran üzerinden kullanıcı nesnesinde bir parmak geçirir ve onu taşıma sırasında parmak sonra kaldırdığında. Bu nesne kullanıcının parmak altında taşıyın ve sonra kullanıcının finger kaldırdığında taşımak devam olduğunu sonucudur.

Yürütme yolu düzenlemesi olayları ve her olay hakkında önemli bilgiler aşağıda gösterilmiştir.

Düzenlemesi olayları

Hareket olayları dizisi.

Aşağıdaki listede önceki çizimde olay sırasını açıklar.

  1. ManipulationStarting Olayı oluşur, kullanıcı yerleştirir parmak nesnesi. Bunun yanı sıra, bu olay ayarlamanızı sağlar ManipulationContainer özelliği. Sonraki olayları, göreli konumunu düzenleme olacaktır ManipulationContainer. Olaylar dışında ManipulationStarting, bu özellik salt okunur durumdadır bu nedenle ManipulationStarting olay olan tek zaman, kendilerine bu özelliği.

  2. ManipulationStarted Olayı oluşur İleri. Bu olay işleme başlangıcını bildirir.

  3. ManipulationDelta Olay ortaya birden çok kez olarak bir kullanıcının fingers taşıma dokunmatik ekran. DeltaManipulation Özelliği ManipulationDeltaEventArgs sınıfı raporlar olup olmadığını denetleme yorumlandığını taşıma, genişletme, veya çeviri. Burada bir nesne üzerinde değişiklik, işin çoğunu gerçekleştirmek budur.

  4. ManipulationInertiaStarting Olayı oluşur, kullanıcının fingers kaybetmek kişi ile nesne. Bu olay düzenlemeleriyle yavaşlama sırasında eylemsizlik belirtmenizi sağlar. İsterseniz, farklı fiziksel boşluk ya da öznitelikleri nesneniz öykünebileceği etmesidir. Örneğin, uygulamanızın fiziksel öğeleri temsil eden iki nesne vardır ve biri diğerinden daha ağır varsayalım. Açık nesne daha hızlı doğru yavaşlatmak ağır nesne yapabilirsiniz.

  5. ManipulationDelta Olayı, eylemsizlik oluşumunda birden çok kez oluşur. Bu olay dokunmatik ekran kullanıcının fingers taşıdığınızda ve ne zaman oluştuğunu not WPF taklit eden eylemsizlik. Başka bir deyişle, ManipulationDelta önce ve sonra ortaya ManipulationInertiaStarting olay. ManipulationDeltaEventArgs.IsInertial Özellik raporları mı ManipulationDelta olay ortaya eylemsizlik, böylece bu özelliği denetlemek ve bağlı farklı eylemler gerçekleştirmek sırasındakendi değer.

  6. ManipulationCompleted Olayı oluşur, düzenlemesi ve tüm eylemsizlik bitiyor. Yani, sonra tüm ManipulationDelta olayları oluşur, ManipulationCompleted olay ortaya düzenlemesi tam olduğuna dair sinyal.

UIElement De tanımlar ManipulationBoundaryFeedback olay. Bu olayın oluşacağı, ReportBoundaryFeedback yöntemi çağrılır ManipulationDelta olay. ManipulationBoundaryFeedback Olay uygulamaları etkinleştirir veya bileşenler için nesnenin görsel geri besleme sağla isabetlerinin sayısı sınırı. Örneğin, Window tutamaçları sınıfı ManipulationBoundaryFeedback olayı, pencere kenarı karşılaşıldığında biraz taşımak neden.

Düzenlemesi çağırarak iptal Cancel dışında herhangi bir düzenleme olayı olay bağımsız değişkenlerin yöntemini ManipulationBoundaryFeedback olay. Aradığınızda Cancel, hareket ettirme olayları artık harekete geçirilen ve fare olayları oluşur dokunma. Aşağıdaki tabloda düzenleme iptal süresi ve meydana gelen fare olayları arasındaki ilişkiyi açıklar.

İptal olay çağrılır.

Zaten giriş için meydana gelen fare olayları

ManipulationStarting and ManipulationStarted

Fare olayları.

ManipulationDelta

Fare tuşunu ve fare olayları taşıyın.

ManipulationInertiaStarting and ManipulationCompleted

Fare, fare taşıma ve fare olayları yukarı aşağı.

Sizi aramayı unutmayın Cancel düzenlemesi, eylemsizlik içinde olduğunda döndüreceðini false ve giriş değil yükseltmek fare olayları.

Dokunma ve düzenlemesi olaylar arasındaki ilişki

A UIElement her zaman almak dokunma olayları. Zaman IsManipulationEnabled özelliği ayarlanmış true, bir UIElement almak dokunma ve hareket ettirme olayları. TouchDown Olay Is not handled (yani, Handled özelliği false), işleme mantığı oluşturduğu düzenlemesi olayları. öðenin dokunma yakalar ve Handled Özelliği ayarlanmış true , TouchDown olay işleme mantığı oluşturmaz düzenlemesi olayları. Aşağıdaki resimde, dokunma olayları ve hareket ettirme olayları arasındaki ilişkiyi gösterir.

Dokunma ve hareket ettirme olayları

Dokunma ve hareket olayları arasındaki ilişki

Aşağıdaki listede önceki resimde gösterilen dokunma ve düzenlemesi olayları arasındaki ilişkiyi açıklar.

Focus

Odak ilgilidir iki ana kavramları vardır WPF: keyboard focus and logical focus.

Keyboard Focus

Klavye odağını klavyeyle giriş öğesine başvurur. There can be only one element on the whole desktop that has keyboard focus. In WPF, the element that has keyboard focus will have IsKeyboardFocused set to true. Statik Keyboard yöntemi FocusedElement döndürür öğe geçerli olan klavye odağı.

Klavye odağı elde edilebilir bir öğe için SEKME veya gibi belirli öğeleri fareyi tıklatarak bir TextBox. Keyboard focus can also be obtained programmatically by using the Focus method on the Keyboard class. FocusBelirtilen öğe Klavye odağını vermeye çalışır. Tarafından döndürülen öğe Focus öðesi geçerli olan klavye odağı.

Klavye odağını elde etmek bir öğe için sırayla Focusable özelliği ve IsVisible özelliklerini ayarlama, doğru. Gibi bazı sınıfları Panel, sahip Focusable için false Varsayılan değer olarak; Bu nedenle, bu özelliği ayarlamak gerekebilir true isterseniz o öğeye görebilirsiniz elde odak.

Aşağıdaki örnek Focus klavye odağı ayarlamak için bir Button. Uygulamada ilk odak ayarlamak için Önerilen yeri bulunan Loaded olay işleyicisi.

        Private Sub OnLoaded(ByVal sender As Object, ByVal e As RoutedEventArgs)
            ' Sets keyboard focus on the first Button in the sample.
            Keyboard.Focus(firstButton)
        End Sub
private void OnLoaded(object sender, RoutedEventArgs e)
{
    // Sets keyboard focus on the first Button in the sample.
    Keyboard.Focus(firstButton);
}

Klavye odağını hakkında daha fazla bilgi için bkz: Odak Özeti.

Logical Focus

Logical focus refers to the FocusManager.FocusedElement in a focus scope. There can be multiple elements that have logical focus in an application, but there may only be one element that has logical focus in a particular focus scope.

Tutar bir kapsayıcı öğe odağı kapsamdır FocusedElement içinde kendi kapsamı. Odak odak kapsamı ayrıldığında, odaklanmış öğesi klavye odağı kaybolur ancak mantıksal odağını korur. Odak odak kapsama döndüğünde, Klavye odağını odaklanan öğe alacaktır. Bu birden çok odak kapsamlar arasında değiştirilecek Klavye odağını verir ancak odak döndüğünde odaklanan öğesi odak kapsamı içinde odaklanmış öğe kalır oluşturmasını sağlar.

Bir öğe odağı kapsamda dönüştürülebilir Extensible Application Markup Language (XAML) ayarlayarak FocusManager bağlı özellik IsFocusScope için true, ya da kod kullanarak ekli özelliğini ayarlayarak SetIsFocusScope yöntemi.

The following example makes a StackPanel into a focus scope by setting the IsFocusScope attached property.

<StackPanel Name="focusScope1" 
            FocusManager.IsFocusScope="True"
            Height="200" Width="200">
  <Button Name="button1" Height="50" Width="50"/>
  <Button Name="button2" Height="50" Width="50"/>
</StackPanel>
            Dim focuseScope2 As New StackPanel()
            FocusManager.SetIsFocusScope(focuseScope2, True)
StackPanel focuseScope2 = new StackPanel();
FocusManager.SetIsFocusScope(focuseScope2, true);

Classes in WPF which are focus scopes by default are Window, Menu, ToolBar, and ContextMenu.

Klavye odaklamasına sahip bir öğe de ait olduğu odak kapsamı için mantıksal odak olacaktır; Bu nedenle, bir öğeyle odak ayarını Focus yöntemi Keyboard vermek öğe Klavye odağını ve sınıf veya temel öğe sınıfları deneyecekmantıksal odağı.

Odak kapsamı odaklanan öğesinde belirlemek için GetFocusedElement. Odak kapsamı için odaklanan bir öğeyi değiştirmek için kullanın SetFocusedElement.

Mantıksal odak hakkında daha fazla bilgi için bkz: Odak Özeti.

Fare konumu

WPF Giriş API için yararlı bilgiler sağlarkoordinat boşluk. Örneğin, koordinat (0,0) sol üst koordinatı, ancak sol üst ağacında hangi öğenin? Giriş hedef öğesi? Öğe, olay işleyicisine bağlı? Veya başka bir şey mi? Karışıklığı önlemek için WPF Giriş API belirterek, kare referansına koordinatları elde aracılığıyla çalışırken gerektirirfare. GetPosition Yöntemi göreli olarak fare işaretçisinin koordinatı döndürürbelirtilen öğe.

Fare yakalama

Fare aygıtları, özellikle fare yakalama bilinen kalıcı olmayacağı tutun. Fare yakalama, sürükle ve bırak işlemi başlatıldığında, nominal ekrandaki ilgili diğer işlemleri fare işaretçisinin konumunu mutlaka ortaya böylece geçiş giriş durumu korumak için kullanılır. Sürükleme sırasında kullanıcı sürükleyin ve fare yakalama Sürükle kaynağı tarafından tutulan sırada getiren çoğu fare yardımlar uygunsuz bırak, durduruluyor olmadan tıklatamazsınız. Giriş sistemi sergiler APIs Fare yakalama durumunu belirleyebilir yanı APIs , zorla fare yakalama belirli bir öğeye veya işaretini kaldırın fare yakalama durumu. Sürükle ve bırak işlemleri hakkında daha fazla bilgi için bkz: Sürükle ve Bırak'a Genel Bakış.

Commands

Komutlar aygıt giriş daha fazla anlam düzeyinde girdi işleme etkinleştirin. Komutlardır basit yönergeleri gibi Cut, Copy, Paste, veya Open. Komutlar, komut mantığı merkezileştirme için yararlıdır. Aynı komutu tarafından erişilebilen bir Menu, bir ToolBar, veya bir klavye kısayol. Komutları da komutu kullanılamaz duruma geldiğinde denetimleri devre dışı bırakmak için bir mekanizma sağlar.

RoutedCommandİş WPF uygulaması ICommand. Zaman bir RoutedCommand yürütülür, bir PreviewExecuted ve bir Executed olay ortaya komut hedef hangi tünel ve öğe ağacı üzerinden kabarcık gibi diğer giriş. Komut hedef ayarlanmazsa, klavye odağı olan öğe komut hedef olacaktır. Komutu yerine getirir mantığı bağlı olduğu bir CommandBinding. Zaman bir Executed olay ulaştığında bir CommandBinding o belirli bir komutla ilgili ExecutedRoutedEventHandler , CommandBinding denir. Bu işleyici komutun eylemini gerçekleştirir.

Mükemmel bir daha fazla bilgi için bkz: Komut Verme Genel Başış.

WPFoluşan ortak komutları içeren bir kitaplık sunar ApplicationCommands, MediaCommands, ComponentCommands, NavigationCommands, ve EditingCommands, ya da kendi tanımlayabilirsiniz.

Aşağıdaki örnek nasıl oluşturacağınızı gösterir bir MenuItem böylece, tıklatıldığında harekete geçirecek Paste komutunu TextBox, assuming TextBox var. klavye odağı

<StackPanel>
  <Menu>
    <MenuItem Command="ApplicationCommands.Paste" />
  </Menu>
  <TextBox />
</StackPanel>
            ' Creating the UI objects
            Dim mainStackPanel As New StackPanel()
            Dim pasteTextBox As New TextBox()
            Dim stackPanelMenu As New Menu()
            Dim pasteMenuItem As New MenuItem()

            ' Adding objects to the panel and the menu
            stackPanelMenu.Items.Add(pasteMenuItem)
            mainStackPanel.Children.Add(stackPanelMenu)
            mainStackPanel.Children.Add(pasteTextBox)

            ' Setting the command to the Paste command
            pasteMenuItem.Command = ApplicationCommands.Paste
// Creating the UI objects
StackPanel mainStackPanel = new StackPanel();
TextBox pasteTextBox = new TextBox();
Menu stackPanelMenu = new Menu();
MenuItem pasteMenuItem = new MenuItem();

// Adding objects to the panel and the menu
stackPanelMenu.Items.Add(pasteMenuItem);
mainStackPanel.Children.Add(stackPanelMenu);
mainStackPanel.Children.Add(pasteTextBox);

// Setting the command to the Paste command
pasteMenuItem.Command = ApplicationCommands.Paste;

// Setting the command target to the TextBox
pasteMenuItem.CommandTarget = pasteTextBox;

Komutlar hakkında daha fazla bilgi için WPFbakın Komut Verme Genel Başış.

Giriş sistemi ve ana elemanları

Giriş tarafından tanımlanan bağlı olayları gibi olayların Mouse, Keyboard, ve Stylus sınıfları giriş sistemi tarafından oluşturulur ve nesne modelindeki isabet görsel ağacının sınama göre belirli bir konuma Püskürtülençalışma saati.

Her olay, Mouse, Keyboard, ve Stylus olarak tanımlayan bir olay bağlı temel öğe sınıfları tarafından da re-exposed UIElement ve ContentElement olarak yeni bir olay yönlendirmeli. Özgün işleme sınıfları tarafından yönlendirilen temel öğe olayları oluşturulur olay bağlı ve Olay verileri yeniden kullanma.

Giriş olayını temel öğe girdi olay uygulaması aracılığıyla belirli kaynak öğe ile ilişkili olduğunda, mantıksal ve görsel ağaç nesnelerin bir birleşimini temel alır ve uygulama kodu tarafından işlenen bir olay yolun geri kalan üzerinden yönlendirilebilir. Genellikle, yönlendirilmiş olayları kullanarak bu aygıtla ilgili giriş olayları işlemek daha kullanışlı olan UIElement ve ContentElement, çünkü daha sezgisel olay işleyicisi sözdiziminde hem kullanarak XAML ve kod. Bunun yerine işlem başlatılan bağlanmış olay işlemeye seçebilir, ancak çeşitli sorunlar yüz: bağlanmış olay temel öğe sınıfı işleme tarafından işlenmiş olarak işaretlenebilir ve ekli olay işleyicileri eklemek için doğru olay sözdizimi yerine erişimci yöntemleri kullanmanız gerekebilir.

What's Next

Artık giriş işlemek için çeşitli teknikler vardır WPF. Giriş olayları ve yönlendirilmiş olay mekanizmaları tarafından kullanılan çeşitli türlerde geliştirilmiş bir anlama sahip olmalıdır WPF.

Ek kaynaklar kullanılabilir olacak WPF framework öğeleri ve olay yönlendirmesi daha fazla ayrıntı. Daha fazla bilgi için aşağıdaki genel bakışlarını görmek Komut Verme Genel Başış, Odak Özeti, Temel Öğelere Genel Bakış, WPF içinde ağaçlar, ve Yönlendirilmiş Olaylara Genel Bakış.

Ayrıca bkz.

Kavramlar

Odak Özeti

Komut Verme Genel Başış

Yönlendirilmiş Olaylara Genel Bakış

Temel Öğelere Genel Bakış

Diğer Kaynaklar

Özellikler