Bagikan melalui


VisualStateGroup Kelas

Definisi

Berisi objek VisualState yang saling eksklusif dan objek VisualTransition yang digunakan untuk pergi dari satu status ke status lainnya.

public ref class VisualStateGroup sealed : DependencyObject
/// [Windows.Foundation.Metadata.Activatable(65536, Windows.Foundation.UniversalApiContract)]
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
/// [Windows.UI.Xaml.Markup.ContentProperty(Name="States")]
class VisualStateGroup final : DependencyObject
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
/// [Windows.UI.Xaml.Markup.ContentProperty(Name="States")]
/// [Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
class VisualStateGroup final : DependencyObject
[Windows.Foundation.Metadata.Activatable(65536, typeof(Windows.Foundation.UniversalApiContract))]
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
[Windows.UI.Xaml.Markup.ContentProperty(Name="States")]
public sealed class VisualStateGroup : DependencyObject
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
[Windows.UI.Xaml.Markup.ContentProperty(Name="States")]
[Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
public sealed class VisualStateGroup : DependencyObject
Public NotInheritable Class VisualStateGroup
Inherits DependencyObject
<VisualStateManager.VisualStateGroups>
   <VisualStateGroup x:Name="groupname" ...>
     oneOrMoreVisualStates
   </VisualStateGroup>
   <!--- other peer VisualStateGroup's here ... -->
</VisualStateManager.VisualStateGroups>
Warisan
Object Platform::Object IInspectable DependencyObject VisualStateGroup
Atribut

Persyaratan Windows

Rangkaian perangkat
Windows 10 (diperkenalkan dalam 10.0.10240.0)
API contract
Windows.Foundation.UniversalApiContract (diperkenalkan dalam v1.0)

Contoh

Contoh ini membuat ControlTemplate sederhana untuk Tombol yang berisi satu Kisi. Ini juga berisi VisualStateGroup yang disebut "CommonStates", yang mendefinisikan status "PointerOver" dan "Normal". VisualStateGroup juga memiliki VisualTransition yang menentukan bahwa dibutuhkan satu setengah detik agar Grid berubah dari hijau ke merah ketika pengguna meletakkan pointer di atas Tombol.

<ControlTemplate TargetType="Button">
  <Grid >
    <VisualStateManager.VisualStateGroups>
      <VisualStateGroup x:Name="CommonStates">

        <VisualStateGroup.Transitions>

          <!--Take one half second to transition to the PointerOver state.-->
          <VisualTransition To="PointerOver" 
                              GeneratedDuration="0:0:0.5"/>
        </VisualStateGroup.Transitions>
        
        <VisualState x:Name="Normal" />

        <!--Change the SolidColorBrush, ButtonBrush, to red when the
            Pointer is over the button.-->
        <VisualState x:Name="PointerOver">
          <Storyboard>
            <ColorAnimation Storyboard.TargetName="ButtonBrush" 
                            Storyboard.TargetProperty="Color" To="Red" />
          </Storyboard>
        </VisualState>
      </VisualStateGroup>
    </VisualStateManager.VisualStateGroups>
    <Grid.Background>
      <SolidColorBrush x:Name="ButtonBrush" Color="Green"/>
    </Grid.Background>
  </Grid>
</ControlTemplate>

Keterangan

Setiap VisualStateGroup yang dideklarasikan dalam XAML sebagai bagian dari templat kontrol harus selalu memiliki atribut x:Name yang diatur di dalamnya. Setiap string nama yang digunakan dalam kumpulan VisualStateGroups dalam templat kontrol harus unik dalam templat tersebut. Biasanya menggunakan nama grup yang sama untuk kontrol yang berbeda. Misalnya, hampir semua templat kontrol yang ada memiliki VisualStateGroup dengan atribut x:Name dari "CommonStates".

Kumpulan status visual dalam setiap VisualStateGroup harus saling eksklusif dalam grup. Dengan kata lain, kontrol harus menggunakan salah satu status visual dari masing-masing grup VisualStateGroup yang ditentukan setiap saat. Setiap kali ada kasus di mana kontrol dimaksudkan untuk secara bersamaan dalam dua status, pastikan bahwa kedua negara bagian berada dalam grup yang berbeda. Misalnya, dimungkinkan bagi kontrol drop-down untuk secara bersamaan difokuskan dan membuka drop-downnya. Dalam desain status visual yang benar, Anda akan memiliki VisualStateGroup terpisah untuk setiap status sehingga keduanya dapat aktif sekaligus. Grup tersebut mungkin memiliki nama seperti "FocusStates" dan "DropDownStates".

Setiap kali Anda menentukan VisualStateGroup yang memungkinkan perilaku papan cerita sementara di salah satu elemen VisualState-nya , pastikan bahwa grup juga berisi VisualState kedua yang dapat dipanggil untuk membatalkan status sebelumnya. Ini bisa sesederhana mendeklarasikan VisualState kedua tanpa Storyboard sama sekali, hanya atribut x:Name.

Nilai atribut x:Name yang Anda tetapkan untuk VisualStateGroup tidak digunakan untuk panggilan ke VisualStateManager.GoToState; sebaliknya itu adalah atribut x:Name dari VisualState yang digunakan untuk VisualStateManager.GoToState. Siapa pun yang menggunakan VisualStateManager.GoToState harus mengetahui semua grup dan status yang tersedia, sehingga setiap panggilan beralih dengan benar dari status lama ke status baru dalam grup.

Selain sekumpulan elemen VisualState , VisualStateGroup juga dapat menentukan sekumpulan elemen VisualTransition , di mana setiap VisualTransition berkaitan dengan setidaknya salah satu elemen VisualState bernama yang ditentukan dalam grup. Di XAML, kumpulan elemen VisualState dapat dinyatakan sebagai elemen objek langsung elemen turunan dari VisualStateGroup. Ini dimungkinkan karena properti States , yang merupakan kumpulan status visual, adalah properti konten XAML untuk VisualStateGroup. Sebaliknya, untuk mengatur kumpulan transisi visual, Anda harus mendeklarasikan koleksi tersebut dalam elemen properti VisualStateGroup.Transitions di XAML. Untuk informasi selengkapnya tentang properti konten XAML, lihat panduan sintaks XAML.

Saat menggunakan StateTriggers untuk mengontrol status visual, mesin pemicu menggunakan aturan prioritas berikut untuk menilai pemicu dan menentukan pemicu mana, dan VisualState yang sesuai, akan aktif:

  1. Pemicu kustom yang berasal dari StateTriggerBase
  2. AdaptiveTrigger diaktifkan karena MinWindowWidth
  3. AdaptiveTrigger diaktifkan karena MinWindowHeight

Jika ada beberapa pemicu aktif pada satu waktu yang memiliki konflik dalam penilaian (yaitu dua pemicu kustom aktif), pemicu pertama yang dideklarasikan dalam file markup lebih diutamakan.

Catatan: Meskipun AdaptiveTrigger berasal dari StateTriggerBase, adaptiveTriggerBase hanya dapat diaktifkan melalui pengaturan MinWindowWidth dan/atau MinWindowHeight.

VisualStateGroup API yang mendukung implementasi VisualStateManager kustom

Banyak API VisualStateGroup hanya ada untuk mendukung implementasi VisualStateManager kustom. Ini termasuk: Nama, CurrentState, CurrentStateChanging, CurrentStateChanged. Penggunaan status visual yang paling umum untuk templat kontrol tidak memerlukan API ini. Secara khusus tidak khas untuk menangani peristiwa. Sebagian besar operasi logika untuk kontrol harus melibatkan properti dan peristiwanya sendiri. Untuk sebagian besar skenario definisi aplikasi dan kontrol, perubahan status visual yang terjadi pada kontrol seharusnya hanya merupakan hasil akhir dari logika yang diterapkan kontrol ke templatnya, bukan pemicu untuk logika lain.

Konstruktor

VisualStateGroup()

Menginisialisasi instans baru kelas VisualStateGroup .

Properti

CurrentState

Mendapatkan VisualState yang terakhir diatur dari panggilan yang berhasil ke metode GoToState .

Dispatcher

Mendapatkan CoreDispatcher yang dikaitkan dengan objek ini. CoreDispatcher mewakili fasilitas yang dapat mengakses DependencyObject pada utas UI bahkan jika kode dimulai oleh utas non-UI.

(Diperoleh dari DependencyObject)
Name

Mendapatkan nama VisualStateGroup.

States

Mendapatkan koleksi objek VisualState yang saling eksklusif.

Transitions

Mendapatkan koleksi objek VisualTransition .

Metode

ClearValue(DependencyProperty)

Menghapus nilai lokal properti dependensi.

(Diperoleh dari DependencyObject)
GetAnimationBaseValue(DependencyProperty)

Mengembalikan nilai dasar apa pun yang ditetapkan untuk properti dependensi, yang akan berlaku dalam kasus di mana animasi tidak aktif.

(Diperoleh dari DependencyObject)
GetValue(DependencyProperty)

Mengembalikan nilai efektif properti dependensi saat ini dari DependencyObject.

(Diperoleh dari DependencyObject)
ReadLocalValue(DependencyProperty)

Mengembalikan nilai lokal properti dependensi, jika nilai lokal ditetapkan.

(Diperoleh dari DependencyObject)
RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback)

Mendaftarkan fungsi pemberitahuan untuk mendengarkan perubahan pada DependencyProperty tertentu pada instans DependencyObject ini.

(Diperoleh dari DependencyObject)
SetValue(DependencyProperty, Object)

Mengatur nilai lokal properti dependensi pada DependencyObject.

(Diperoleh dari DependencyObject)
UnregisterPropertyChangedCallback(DependencyProperty, Int64)

Membatalkan pemberitahuan perubahan yang sebelumnya terdaftar dengan memanggil RegisterPropertyChangedCallback.

(Diperoleh dari DependencyObject)

Acara

CurrentStateChanged

Terjadi setelah kontrol berubah menjadi status yang berbeda.

CurrentStateChanging

Terjadi ketika kontrol mulai berubah menjadi status yang berbeda.

Berlaku untuk

Lihat juga