لا يمكن الوصول إلى عنصر التحكم المخصص لـ Metro XAML من خلال التعليمات البرمجية الموجودة خلفه
-
13-12-2019 - |
سؤال
محاولة استخدام الحل ل هذا السؤال يعطيني مشكلة غريبة.(منقول هنا للإفادة)
هذا هو الحل لمشكلة مع ListView
ابتلاع حدث النقر بزر الماوس الأيمن ومنع فتح AppBar - فئة ترث ListView
ويتجاوز OnRightTapped
حدث ListViewItem
:
public class MyListView : ListView
{
protected override DependencyObject GetContainerForItemOverride()
{
return new MyListViewItem();
}
}
public class MyListViewItem : ListViewItem
{
protected override void OnRightTapped(Windows.UI.Xaml.Input.RightTappedRoutedEventArgs e)
{
base.OnRightTapped(e);
e.Handled = false; // Stop 'swallowing' the event
}
}
<CustomControls:MyListView
x:Name="ItemsList"
...
SelectionMode="Single"
RightTapped="MyListView_RightTapped">
</CustomControls:MyListView>
لقد قمت بتنفيذ عنصر تحكم مخصص كما هو محدد، في مساحة اسم جديدة تسمى CustomControls، تمامًا كما هو موضح.لقد أضفت مساحة الاسم هذه إلى MainPage.xaml
xmlns:CustomControls="using:CustomControls"
عندما أحاول بعد ذلك الإشارة إلى "ItemsList" في الكود الموجود خلفه، أحصل على خطأ في الترجمة
The name 'ItemsList' does not exist in the current context
لقد حاولت بناء الحل وإعادة بنائه وتنظيفه وإغلاق الحل وإعادة فتحه ووضع الفئات ضمن مساحة اسم المشروع الرئيسية، ولكن دون جدوى.
للتلخيص، لا يمكن لـ MainPage.cs رؤية عنصر تحكم مخصص في MainPage.xaml
التحديث 2:تمت إعادة صياغة السؤال لإزالة المشكلات غير ذات الصلة.لقد قمت أيضًا بتغيير العنوان ليعكس المشكلة الحقيقية.
المحلول
كنت أستخدم Name
ولكن كان ينبغي أن تستخدم x:Name
.يبدو أن عناصر التحكم المخصصة وعناصر تحكم المستخدم بحاجة إلى استخدامها x:Name
بدلا من Name
أن ينظر إليها في التعليمات البرمجية وراء.
مزيد من المعلومات حول الفرق هنا: