VisualStateGroup Kelas
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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
/// [Microsoft.UI.Xaml.Markup.ContentProperty(Name="States")]
/// [Windows.Foundation.Metadata.Activatable(65536, "Microsoft.UI.Xaml.WinUIContract")]
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.UI.Xaml.WinUIContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class VisualStateGroup final : DependencyObject
[Microsoft.UI.Xaml.Markup.ContentProperty(Name="States")]
[Windows.Foundation.Metadata.Activatable(65536, "Microsoft.UI.Xaml.WinUIContract")]
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.UI.Xaml.WinUIContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
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
- Atribut
Contoh
Contoh ini membuat ControlTemplate sederhana untuk Tombol yang berisi satu Kisi. Ini juga berisi yang VisualStateGroup
disebut "CommonStates", yang mendefinisikan status "PointerOver" dan "Normal". juga VisualStateGroup
memiliki VisualTransition yang menentukan bahwa dibutuhkan satu setengah detik untuk Grid
mengubah dari hijau ke merah ketika pengguna meletakkan penunjuk di Button
atas .
<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 x:Name attribute
"CommonStates".
Kumpulan status visual dalam masing-masing VisualStateGroup
harus saling eksklusif dalam grup. Dengan kata lain, kontrol harus menggunakan salah satu status visual dari setiap grup yang ditentukan VisualStateGroup
setiap saat. Setiap kali ada kasus di mana kontrol dimaksudkan untuk secara bersamaan dalam dua status, pastikan bahwa kedua negara bagian berada dalam kelompok yang berbeda. Misalnya, dimungkinkan bagi kontrol drop-down untuk secara bersamaan difokuskan dan membuka drop-down-nya. Dalam desain status visual yang benar, Anda akan memiliki terpisah VisualStateGroup
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 detik VisualState
yang dapat dipanggil untuk membatalkan status sebelumnya. Ini bisa sesering mendeklarasikan yang kedua VisualState
tanpa Storyboard sama sekali, hanya atribut x:Name.
Nilai atribut x:Name yang VisualStateGroup
Anda tetapkan untuk tidak digunakan untuk panggilan ke VisualStateManager.GoToState; sebagai gantinya adalah x:Name attribute
dari VisualState yang digunakan untuk VisualStateManager.GoToState
. Siapa pun yang menggunakan VisualStateManager.GoToState
harus menyadari semua grup dan status yang tersedia, sehingga setiap panggilan beralih dengan benar dari status lama ke status baru dalam grup.
Selain sekumpulan elemen VisualState , juga VisualStateGroup
dapat menentukan sekumpulan elemen VisualTransition , di mana masing-masing VisualTransition
berkaitan dengan setidaknya salah satu elemen bernama VisualState
yang ditentukan dalam grup. Dalam XAML, kumpulan VisualState
elemen dapat dinyatakan sebagai elemen elemen objek langsung elemen anak 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 menyatakan bahwa koleksi 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:
- Pemicu kustom yang berasal dari StateTriggerBase
- AdaptiveTrigger diaktifkan karena MinWindowWidth
- AdaptiveTrigger diaktifkan karena MinWindowHeight
Jika ada beberapa pemicu aktif pada satu waktu yang memiliki konflik dalam penilaian (yaitu dua pemicu kustom aktif), maka yang pertama 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 yang VisualStateGroup
ada hanya 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 |
Selalu kembali |
DispatcherQueue |
|
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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk