Используя эта публикация в качестве ссылки, я пытаюсь отобразить индекс элемента Listbox, реализуя присоединенное свойство. Я буду первым, кто признает, что не совсем понимаю, как прикрепленное свойство решит эту проблему, но я надеялся, что это станет ясным после успешной реализации решения. Потратив бесчисленное количество часов на эту проблему, я ищу небольшую помощь, будь то прикрепленное свойство или нет. На этом этапе он использует строку по умолчанию («По умолчанию»), но, похоже, он не оценивает другие функции. Вот что у меня есть на данный момент:
В WPF:
<TextBlock Text = "{Binding RelativeSource = {RelativeSource FindAncestor, AncestorType = {x:Type ListBoxItem}},
Mode=OneWay,
Path=(Silhouette_Controls_ThumbnailListbox:ListBoxItemIndex.ItemIndex)}"
TextAlignment = "Center"
VerticalAlignment = "Bottom"
HorizontalAlignment = "Center" />
Класс свойств зависимости в C#
public class ListBoxItemIndex : DependencyObject
{
public static readonly DependencyProperty ItemIndexProperty =
DependencyProperty.RegisterAttached(
"ItemIndex",
typeof(string),
typeof(ListBoxItemIndex),
new PropertyMetadata("Default", new PropertyChangedCallback(OnItemIndexChanged)));
public static string GetItemIndex(DependencyObject element)
{
return (string)element.GetValue(ItemIndexProperty);
}
public static void SetItemIndex(DependencyObject element, string value)
{
element.SetValue(ItemIndexProperty, value);
}
private static void OnItemIndexChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
ListBoxItem item = d as ListBoxItem;
ListBox view = ItemsControl.ItemsControlFromItemContainer(item) as ListBox;
int index = view.ItemContainerGenerator.IndexFromContainer(item);
}
}





Не думаю, что прикрепленное свойство поможет вам в этом случае. Ваше присоединенное свойство всегда будет иметь значение «По умолчанию», поскольку я не думаю, что вы устанавливаете это свойство на что-то другое. OnItemIndexChanged вызывается только в том случае, если свойство ItemIndex было изменено с помощью привязки или непосредственно в XAML или коде.
Я бы использовал преобразователь значений так же, как ссылку, которую вы разместили выше.
В MSDN есть образец для создания значения на инверторе: http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx