Bagikan melalui


RelativeSource MarkupExtension

Menentukan properti RelativeSource sumber pengikatan, yang akan digunakan dalam Ekstensi Markup Pengikatan, atau saat mengatur RelativeSource properti elemen yang Binding dibuat di XAML.

Penggunaan Atribut XAML

<Binding RelativeSource="{RelativeSource modeEnumValue}" ... />

Penggunaan Atribut XAML (berlapis dalam ekstensi Pengikatan)

<object property="{Binding RelativeSource={RelativeSource modeEnumValue} ...}" ... />

Penggunaan Elemen Objek XAML

<Binding>
  <Binding.RelativeSource>
    <RelativeSource Mode="modeEnumValue"/>
  </Binding.RelativeSource>
</Binding>

-atau-

<Binding>
  <Binding.RelativeSource>
    <RelativeSource
      Mode="FindAncestor"
      AncestorType="{x:Type typeName}"
      AncestorLevel="intLevel"
    />
  </Binding.RelativeSource>
</Binding>

Nilai XAML

Nilai Deskripsi
modeEnumValue Salah satu dari berikut ini:

- Token Selfstring ; sesuai dengan yang RelativeSource dibuat dengan propertinya Mode diatur ke Self.
- Token TemplatedParentstring ; sesuai dengan yang RelativeSource dibuat dengan propertinya Mode diatur ke TemplatedParent.
- Token PreviousDatastring ; sesuai dengan yang RelativeSource dibuat dengan propertinya Mode diatur ke PreviousData.
- Lihat di bawah ini untuk informasi tentang FindAncestor mode.
FindAncestor Token FindAncestorstring . Menggunakan token ini memasuki mode di mana RelativeSource menentukan jenis leluhur dan secara opsional tingkat leluhur. Ini sesuai dengan yang RelativeSource dibuat dengan propertinya Mode diatur ke FindAncestor.
typeName Diperlukan untuk FindAncestor mode. Nama jenis, yang mengisi AncestorType properti .
intLevel Opsional untuk FindAncestor mode. Tingkat leluhur (dievaluasi ke arah induk di pohon logis).

Keterangan

{RelativeSource TemplatedParent} penggunaan pengikatan adalah teknik utama yang membahas konsep yang lebih besar dari pemisahan UI kontrol dan logika kontrol. Ini memungkinkan pengikatan dari dalam definisi templat ke induk templat (instans objek run time tempat templat diterapkan). Untuk kasus ini, Ekstensi Markup TemplateBinding sebenarnya merupakan singkatan dari ekspresi pengikatan berikut: {Binding RelativeSource={RelativeSource TemplatedParent}}. TemplateBinding atau {RelativeSource TemplatedParent} penggunaan keduanya hanya relevan dalam XAML yang menentukan templat. Untuk informasi selengkapnya, lihat TemplateBinding Markup Extension.

{RelativeSource FindAncestor} terutama digunakan dalam templat kontrol atau komposisi UI mandiri yang dapat diprediksi, untuk kasus di mana kontrol selalu diharapkan berada di pohon visual dari jenis leluhur tertentu. Misalnya, item kontrol item mungkin menggunakan FindAncestor penggunaan untuk mengikat properti item mereka mengontrol leluhur induk. Atau, elemen yang merupakan bagian dari komposisi kontrol dalam templat dapat menggunakan FindAncestor pengikatan ke elemen induk dalam struktur komposisi yang sama.

Dalam sintaks elemen objek untuk FindAncestor mode yang ditampilkan di bagian Sintaks XAML, sintaks elemen objek kedua digunakan khusus untuk FindAncestor mode. FindAncestor mode memerlukan AncestorType nilai. Anda harus mengatur AncestorType sebagai atribut menggunakan referensi x:Type Markup Extension ke jenis leluhur yang akan dicari. Nilai AncestorType digunakan saat permintaan pengikatan diproses pada run-time.

Untuk FindAncestor mode, properti AncestorLevel opsional dapat membantu membedakan pencarian leluhur dalam kasus di mana mungkin ada lebih dari satu leluhur dari jenis tersebut yang ada di pohon elemen.

Untuk informasi selengkapnya tentang cara menggunakan FindAncestor mode, lihat RelativeSource.

{RelativeSource Self} berguna untuk skenario di mana satu properti instans harus bergantung pada nilai properti lain dari instans yang sama, dan tidak ada hubungan properti dependensi umum (seperti paksaan) yang sudah ada di antara kedua properti tersebut. Meskipun jarang ada dua properti pada objek sehingga nilainya benar-benar identik (dan diketik secara identik), Anda juga dapat menerapkan Converter parameter ke pengikatan yang memiliki {RelativeSource Self}, dan menggunakan pengonversi untuk mengonversi antara jenis sumber dan target. Skenario lain untuk {RelativeSource Self} adalah sebagai bagian MultiDataTriggerdari .

Misalnya, XAML berikut mendefinisikan Rectangle elemen sedih sehingga tidak peduli nilai apa yang dimasukkan untuk Width, Rectangle selalu persegi: <Rectangle Width="200" Height="{Binding RelativeSource={RelativeSource Self}, Path=Width}" .../>

{RelativeSource PreviousData} berguna baik dalam templat data, atau dalam kasus di mana pengikatan menggunakan koleksi sebagai sumber data. Anda dapat menggunakan {RelativeSource PreviousData} untuk menyoroti hubungan antara item data yang berdekatan dalam koleksi. Teknik terkait adalah menetapkan MultiBinding antara item saat ini dan sebelumnya di sumber data, dan menggunakan pengonversi pada pengikatan tersebut untuk menentukan perbedaan antara dua item dan propertinya.

Dalam contoh berikut, yang pertama TextBlock dalam templat item menampilkan angka saat ini. Pengikatan kedua TextBlock adalah MultiBinding yang secara nominal memiliki dua Binding konstituen: rekaman saat ini, dan pengikatan yang sengaja menggunakan rekaman data sebelumnya dengan menggunakan {RelativeSource PreviousData}. Kemudian, pengonversi pada MultiBinding menghitung perbedaan dan mengembalikannya ke pengikatan.

<ListBox Name="fibolist">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
            <TextBlock Text="{Binding}"/>
            <TextBlock>, difference = </TextBlock>
                <TextBlock>
                    <TextBlock.Text>
                        <MultiBinding Converter="{StaticResource DiffConverter}">
                            <Binding/>
                            <Binding RelativeSource="{RelativeSource PreviousData}"/>
                        </MultiBinding>
                    </TextBlock.Text>
                </TextBlock>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Menjelaskan pengikatan data sebagai konsep tidak tercakup di sini, lihat Gambaran Umum Pengikatan Data.

Dalam implementasi prosesor WPF XAML, penanganan untuk ekstensi markup ini ditentukan oleh RelativeSource kelas .

RelativeSource adalah ekstensi markup. Ekstensi markup biasanya diimplementasikan ketika ada persyaratan untuk meloloskan nilai atribut menjadi selain nilai harfiah atau nama handler, dan persyaratannya lebih global daripada hanya menempatkan pengonversi jenis pada jenis atau properti tertentu. Semua ekstensi markup di XAML menggunakan { karakter dan } dalam sintaks atributnya, yang merupakan konvensi di mana prosesor XAML mengenali bahwa ekstensi markup harus memproses atribut. Untuk informasi selengkapnya, lihat Ekstensi Markup dan WPF XAML.

Baca juga