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
/// [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
Object Platform::Object IInspectable DependencyObject VisualStateGroup
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 Buttonatas .

<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:

  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), 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 null di aplikasi SDK Aplikasi Windows. Gunakan DispatcherQueue sebagai gantinya.

(Diperoleh dari DependencyObject)
DispatcherQueue

DispatcherQueue Mendapatkan yang dikaitkan dengan objek ini. DispatcherQueue 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