إضافة textblock قبل عنصر آخر في صندوق القائمة
-
25-09-2019 - |
سؤال
أتعلم حاليًا كيفية تطوير وإنشاء تطبيق لنظام التشغيل Windows Phone 7.
إذا كانت قيمة معينة صحيحة ، فأنا بحاجة إلى إضافة textblock إلى قائمة القائمة قبل أن يكون نصًا (قل اسمه هو x:Name="dayTxtBx"
).
أنا أستخدم حاليًا
dayListBox.Items.Add(dayTxtBx);
لإضافة مربع النص.
أي مساعدة موضع تقدير كبير!
شكرًا
المحلول
من السهل جدًا القيام بذلك إذا كنت تستخدم datatemplate و valueconverter وتمرير الكائن بالكامل إلى صندوق القائمة (بدلاً من مجرد سلسلة). على افتراض أن لديك بعض الكائنات التي تشبه:
public class SomeObject: INotifyPropertyChanged
{
private bool mTestValue;
public bool TestValue
{
get {return mTestValue;}
set {mTestValue = value; NotifyPropertyChanged("TestValue");}
}
private string mSomeText;
public string SomeText
{
get {return mSomeText;}
set {mSomeText = value; NotifyPropertyChanged("SomeText");}
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string name)
{
if ((name != null) && (PropertyChanged != null))
{
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
}
يمكنك عمل محول يشبه:
public class BooleanVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value != null && (bool)value)
return Visibility.Visible;
else
return Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
وأضف المحول إلى XAML مثل SO:
<UserControl x:Class="MyProject.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MyProject">
<UserControl.Resources>
<local:BooleanVisibilityConverter x:Key="BoolVisibilityConverter" />
<UserControl.Resources>
ثم يمكن أن يتم تعريف صندوق القائمة في XAML مثل SO:
<Listbox>
<Listbox.ItemTemplate>
<DataTemplate>
<StackPanel Orentation="Horizontal" >
<TextBlock Text="Only Show If Value is True" Visibility={Binding TestValue, Converter={StaticResource BoolVisibilityConverter}} />
<TextBlock Text="{Binding SomeText}" />
</StackPanel>
</DataTemplate>
</Listbox.ItemTemplate>
</Listbox>
قد يبدو الأمر كثيرًا ، لكنه بسيط جدًا بمجرد البدء. هناك طريقة رائعة لمعرفة المزيد حول ربط البيانات والمحولات في مدونة Jesse Liberty ( http://jesseliberty.com/؟s=windows+phone+from+Scratch ).