WPF-də x: Ad və Adın xüsusiyyətləri arasında hansı fərqlər var?

Başlıq bütün bunları deyir. Bəzən Namex:Name xüsusiyyətləri bir-birinin ardınca gələ bilər.

Beləliklə, onların arasında son fərqlər nədir və birinin üstündən istifadə etmək üstünlük təşkil edir?

Yanlış istifadə üçün hər hansı bir performans və yaddaş təsiri varmı?

506
26 февр. 26 Fevralda Drew Noakes tərəfindən təyin olundu 2009-02-26 12:53 '09 da 12:53 'da 2009-02-26 12:53
@ 14 cavab

XAML-də x:Name adının yalnız bir adı var x:Name . WPF kimi bir quruluş, XAML x:Name RuntimeNamePropertyAttribute , x:Name xüsusiyyətini birinə RuntimeNamePropertyAttribute x:Name , sinifdə RuntimeNamePropertyAttribute istifadə edərək, sinif xüsusiyyətlərindən birini x: Name XAML xüsusiyyətinin göstəricisi kimi təyin edir.

Bunun səbəbi WPF kimi iş vaxtında "Ad" anlayışına malik olan çərçivələrə icazə vermək idi. Məsələn, WPF FrameworkElement Ad xüsusiyyətinə daxil olur.

Ümumiyyətlə, bir sinif üçün x:Name adını saxlamaq lazım deyil x:Name İstifadə edilə bilən bir ad. Bütün x:Name XAML sinifdən sonra kodu dəyər saxlamaq üçün bir sahə yaradır. Bu Xəritəçəkmə ilə iş müddəti nə quruluşa bağlıdır.

Niyə eyni şeyi etmək üçün iki yol var? Sadə cavab bir xüsusiyyətdə iki anlayışın nümayiş etdirilməsidir. WPF, element adının iş vaxtında (Bind vasitəsilə istifadə edilə bilən) istifadə edilməsini istəyir və XAML sinifdən sonra sinifdə hansı sahə üzrə əldə etmək istədiyiniz elementləri bilmək lazımdır. WPF, bu adları bir-birinə bağlayaraq, ad adını xəta x kimi təyin edir: Ad.

Gələcəkdə, XAML üçün daha çox istifadə ediləcək x: Adı, məsələn, adı ilə digər obyektlərə istinad edərək xüsusiyyətləri təyin etməyə imkan verir, ancaq 3,5 və daha əvvəl yalnız sahələri yaratmaq üçün istifadə olunur.

Bu və ya sualdan istifadə etsəniz, bu, texniki deyil, stil məsələsidir. Tövsiyə üçün başqalarına buraxacağam.

Həmçinin baxın AutomationProperties.Name VS x: Ad , AutomationProperties.Name, əlçatanlıq alətləri və bəzi test alətləri tərəfindən istifadə olunur.

434
27 февр. cavab şükrü 27 feb . 2009-02-27 03:52 '09 at 3:52 am 2009-02-27 03:52

Onlar eyni deyil.

x:Name , əsasən elementlərə istinad etmək üçün istifadə edilən xaml konsepsiyasıdır. Bir elementə x: xaml xətti xətti verdikdə " x:Name xaml işləməsi zamanı əsas kodda yaradılan sahənin adını alır və bu sahədə bir obyekt istinad var". ( MSDN ) Beləliklə, bu, dizayner tərəfindən yaradılan bir sahədir ki, bu da daxili girişə malikdir.

border=0

Xaml özniteliği şəklində wpf elementinin hər hansı digər xüsusiyyətləri kimi görünən mövcud bir FrameworkElement string xüsusiyyətidir.

Nəticədə, x:Name daha geniş bir obyekt obyekti üçün istifadə oluna bilər. Bu xaml-də bir adla hər hansı bir şeyə müraciət etməyə imkan verən bir üsuldur.

74
15 июля '09 в 2:34 2009-07-15 02:34 Cavab Kenan EK tərəfindən iyulun 15-də saat 02:34 da 2009-07-15 02:34 tarixində verildi

x: Adı və adı müxtəlif adlara istinad edir.

x: ad Xaml faylının üst hissəsində default olaraq müəyyən edilmiş x ad boşluğuna istinad edir.

 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 

Sadəcə adı adının aşağıda göstərilən adını istifadə edir.

 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 

x: Adı alias x adının istifadə edildiyi deyilir . x xarakterlidir və insanların çoxu onu tərk edir, ancaq istədiyiniz şeyi dəyişə bilərsiniz.

 xmlns:foo="http://schemas.microsoft.com/winfx/2006/xaml" 

linkiniz foo olacaqdır : adı

WPF-də ad boşluğunu müəyyənləşdirmək və istifadə etmək


Tamam, daha fərqli baxaq. Xaml səhifəsinə bir düyməni sürükləyin. Bunu iki şəkildə müraciət edə bilərsiniz : adıadı . Bütün xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns: x = "http://schemas.microsoft.com/winfx/2006/xaml" bir neçə ad boşluqlarına Xaml Control ad boşluğunu ehtiva etdiyinə görə (bunun 100% -i deyil) və görünüşdə FrameworkElement varButton sinfi bir miras nümunəsinə malikdir:

 Button : ButtonBase ButtonBase : ContentControl, ICommandSource ContentControl : Control, IAddChild Control : FrameworkElement FrameworkElement : UIElement, IFrameworkInputElement, IInputElement, ISupportInitialize, IHaveResources 

Gözlədiyiniz kimi, FrameworkElement tərəfindən devralınan hər şey bütün ictimai xüsusiyyətlərinə çıxış əldə edəcəkdir. buna görə də, Button halda, onun adı öznitəsilə Çərçivə elementindən, hiyerarşi ağacının ən başında alır. Beləliklə x: adını və ya adını söyləyə bilərsiniz və hər ikisi FrameworkElement elementindən alıcı / setterə istinad edəcəkdir.

MSDN Link

WPF, bir çox CLR adını bir XML adına eşlemek üçün XAML işlemciler tarafından tüketilen CLR özniteliğini tanımlar. XmlnsDefinitionAttribute atributu , yığım yaradan mənbə kodunda toplanma səviyyəsinə yerləşdirilir. WPF qurmaq qaynaq kodu, bu atributu System.Windows və System.Windows.Controls kimi müxtəlif ümumi ad boşluqlarını http://schemas.microsoft.com/winfx/2006/xaml/presentation adına göstərmək üçün istifadə edir.

Beləliklə, montaj xüsusiyyətləri belə bir şeyə bənzəyir:

PresentationFramework.dll - XmlnsDefinitionAttribute:

 [assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows")] [assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Data")] [assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Navigation")] [assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Shapes")] [assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Documents")] [assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Controls")] 
31
26 февр. cavab cgreeno 26 fevral. 2009-02-26 13:36 '09 da 13:36 'da 2009-02-26 13:36

Bunlar həm də eynidır, çərçivənin bir çox elementləri özlərini əmlak adını ortaya qoyur, ancaq x istifadə edə bilməyənlər üçün: ad - Mən adətən x adına sadiqəm, çünki hər şey üçün işləyir.

Nəzarətlər istədikləri bir asılılıq əmlakı adını təyin edə bilərlər (onlar bu asılılıq əmlakı içəridə istifadə etməlidirlər) və ya imtina edə bilərlər.

Buradaburada msdn-də daha ətraflı oxuyun:

FrameworkElement / FrameworkContentElement kimi bir neçə mühüm əsas sinif üçün WPF ad boşluğunda göstərilən Ad bağımlılığı mülkiyyəti eyni məqsədə xidmət edirsə, bəzi WPF Çərçivə səviyyəli tətbiqlər x: Name xüsusiyyətindən istifadə etməməlidirlər. Xüsusilə müəyyən animasiya və hekayə dəstəyi dərslərində, ad xüsusiyyətindən olmayan element koduna giriş lazım olduqda hələ də bəzi ümumi XAML skriptləri və çərçivələri var. Məsələn, x: XAML-də yaradılmış vaxt və dəyişikliklər üzrə ismini göstərməlisiniz, əgər kodu onlara istinad edirsinizsə.

Adı sinif mülkiyyəti kimi istifadə edilə bilərsə, adı və x: Ad öznitelikler kimi bir-birilə əvəz edilə bilər, ancaq hər ikisi eyni elementdə verilmişdirsə, səhv olur.

19
26 февр. Steven Robbinsin 26 Fevralda verdiyi cavabı 2009-02-26 13:03 '09 saat 13:03 'da 2009-02-26 13:03

X: Xüsusi nəzarət varsa, ad yaddaş problemlərinə səbəb ola bilər. Bu, yaddaş yerini NameScope qeydinə saxlayacaqdır.

Heç vaxt x: xeyr lazım deyilsə adı.

9
13 янв. Cavab 13 yanvar tarixində verilir 2011-01-13 21:57 '11 at 21:57 2011-01-13 21:57

Yalnız fərqlər ki, eyni məclisdən nəzarətdə xüsusi nəzarət istifadə edərsəniz, Ad sizin nəzarəti müəyyən etməyəcək və "X elementləri istifadə edin: eyni məclisdə nəzarət üçün" səhv mesajını alacaqsınız. Belə ki, x: WPF-də WPF adı nəzarətinin versiya nəzarətidir. Adı qədim Winform kimi istifadə olunur. WPF və winforms-da nəzarət elementlərini ayırmaq istəmişdilər, çünki xaml-da istifadə etdikləri digər məclislərdən nəzarət etmək üçün atributları istifadə edirlər: nəzarət adları üçün.

Yalnız yadda saxlayırıq, onu qənaət etmək üçün nəzarət üçün bir ad qoymayın, çünki yaddaş boşdur və adınız nəzarətə tətbiq olunduğuna dair bir xəbərdarlıq verəcək, amma heç vaxt istifadə edilməmişdir.

7
17 янв. Cavab Bipul Kumar 17 yanvar verilir. 2013-01-17 21:03 '13 at 21:03 2013-01-17 21:03

Adı

  • FrameworkElement və FrameworkContentElement nəslindən istifadə edilə bilər;
  • SetValue () və əmlakın xüsusiyyətləri ilə kodu istifadə etmək olar.

x: Adı

  • demək olar ki, bütün XAML elementləri üçün istifadə edilə bilər;
  • SetValue () funksiyasından istifadə edilə bilməz; bu yalnız bir obyektdir, çünki obyekt sintaksis atributundan istifadə edilə bilər.

XAML-də hər iki qaydanın vahid FrameworkElement və FrameworkContentElement üçün istifadə edilməsi bir istisnadır: XAML formatlaşdırma ilə tərtib edildikdə, qeydləşmə tərtib edildikdə istisna meydana gələcək, əks halda yüklənərkən baş verər.

7
27 авг. Aleksandr Zolotaryovun cavabı 27 avqust . 2013-08-27 20:12 '13 saat 20:12 'də 2013-08-27 20:12

x:Name : bu obyektin istinadunu saxlamaq üçün arxasında kodu yaratmaq deməkdir.

Name : bu obyektin ad xüsusiyyətini təyin edir.

5
20 янв. Cavab BIBIN K ONANKUNJU 20 yanvar verilir. 2015-01-20 16:04 '15 at 16:04 2015-01-20 16:04

Mən həmişə x: Adı seçimini istifadə edirəm. Hər hansı bir fəaliyyətə təsir göstərdiyini heç bir fikrim yox, yalnız bu səbəbdən daha asan tapa bilirəm. Fərqli bir məclisdə olan öz xüsusi nəzarətiniz varsa, Ad mülkiyyəti həmişə kifayətlənməyəcəkdir. Bu, sadəcə, x: Ad xüsusiyyətinə sadiq qalmağı asanlaşdırır.

4
26 февр. Simon tərəfindən 26 Fevralda verilən cavab . 2009-02-26 12:56 '09 da 12:56 'də 2009-02-26 12:56

Bu WPF elementi deyil, lakin standart XML kodu və BtBh düzgün cavab verdi, x, u mənim ad boşluğuna aiddir. XML-də, element / atributu ad sahəsi ilə prefiks etmədiyiniz zaman, default ad boşluğunu istifadə etmək istədiyiniz halda qəbul edilir. Belə ki, yalnız Name yazmaq x:Name üçün qısa bir əldir. XML adları haqqında daha ətraflı məlumat link mətnində tapa bilərsiniz .

3
26 февр. 26 Fevralda Robert MacLean tərəfindən cavab verildi 2009-02-26 14:35 '09 at 14:35 'da 2009-02-26 14:35

Bir cavab x: x adını C # kimi müxtəlif proqram dillərində istifadə edilməli və adı çərçivədə istifadə edilməlidir. Dürüstəm, bu məncə düşünür.

2
15 нояб. cavab daddycardona 15 noyabr verilir . 2013-11-15 08:49 '13 at 8:49 2013-11-15 08:49

XAML düyməsi düyməsini bəyan etdikdə, Windows işlədilən zaman Button deyilən bir sinifə müraciət edirsiniz.

Düymədə fon, mətn, margin, ..... və Adı özniteliği kimi bir çox xüsusiyyət var.

İndi, XAML-da bir düyməni bəyan etdiyiniz zaman, bu, ad özniteliğine malik olan anonim bir obyekt yaratmaq kimi.

Ümumiyyətlə, anonim bir obyektə müraciət edə bilməzsiniz, ancaq bir WPF mühitində XAML prosessoru, bu obyektə adı öznitəsinə təyin edilmiş hər hansı bir dəyərlə istinad etməyə imkan verir.

İndiyə qədər çox yaxşı.

Bir obyekt yaratmaq üçün başqa bir üsul anonim bir obyekt əvəzinə adlandırılmış bir obyekt yaratmaqdır. Bu halda, XAML adının adı XAML adında bir obyekt üçün bir xüsusiyyətə malikdir və XAML adındakı var ki, siz təyin edə bilərsiniz və obyektinizə müraciət edə bilərsiniz.

Nəticə:

Bir ad xüsusi bir obyektin öznitəsidir, ancaq X: Bu obyektin xüsusiyyətlərindən biridir (ümumi bir obyekti müəyyən edən bir sinif var).

2
24 авг. Cavab RockyMan Rocky 24 aug verilir. 2015-08-24 04:36 '15 saat 04:36 'da 2015-08-24 04:36

Göstərilən x: Adı XAML prosesi zamanı əsas kodda yaradılan sahənin adını alır və bu sahədə obyekt istinad edilir. Silverlight'da, idarə olunan bir API istifadə edərək, bu sahəni yaratma prosesi MSBuild atama addımları ilə həyata keçirilir. Bu da XAML faylının və onun kodunun qismən dərslərinin birləşməsindən məsuldur. Bu davranış mütləq XAML-də göstərilmir; Bu, Silverlight'ın x: Adı proqramlaşdırma və tətbiq modellərində istifadə etmək üçün istifadə etdiyi xüsusi bir tətbiqdir.

MSDN haqqında daha ətraflı məlumat ...

1
29 апр. Cavab Edd 29 apr verilir . 2015-04-29 18:47 '15 at 18:47 2015-04-29 18:47

Araşdırmalarım x:Name bir dəyişiklik kimi x:Name . Lakin, Yerli bir dəyişən kimi Name . Bunun anlamı x: Adı, XAML dosyanızın hər hansı bir yerində zəng edə bilərsiniz, ancaq Ad adı deyil.
Məsələn:

 <StackPanel> <TextBlock Text="{Binding Path=Content, ElementName=btn}" /> <Button Content="Example" Name="btn" /> </StackPanel> <TextBlock Text="{Binding Path=Content, ElementName=btn}" /> 

StackPanel xaricində olduğundan "btn" adlı Content StackPanel

0
15 июня '18 в 14:40 2018-06-15 14:40 Cavab Phuc Hoang tərəfindən 15 İyun '18' də saat 14:40 'də verilir. 2018-06-15 14:40

tags ilə bağlı digər suallar və ya bir sual