Индексный метод списка сделает это для Вас. Если Вы хотите гарантировать порядок, отсортируйте список сначала с помощью sorted()
. Отсортированный принимает, что cmp или основной параметр диктуют, как сортировка произойдет:
a = [5, 4, 3]
print sorted(a).index(5)
Или:
a = ['one', 'aardvark', 'a']
print sorted(a, key=len).index('a')
Вы не опубликовали весь свой код, поэтому мне пришлось вывести и собрать свою собственную версию. У меня работает нормально. Возможно, сравните и сравните с вашим кодом:
Window1.xaml.cs :
using System.Windows;
using System.Windows.Controls;
namespace WpfApplication1
{
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
private void DragCompleteHandler(object sender, RoutedEventArgs e)
{
MessageBox.Show("YEP");
}
}
public class CustomControl : TextBox
{
}
public class DragHelper : DependencyObject
{
public static readonly DependencyProperty IsDragSourceProperty = DependencyProperty.RegisterAttached("IsDragSource",
typeof(bool),
typeof(DragHelper),
new FrameworkPropertyMetadata(OnIsDragSourceChanged));
public static bool GetIsDragSource(DependencyObject depO)
{
return (bool)depO.GetValue(IsDragSourceProperty);
}
public static void SetIsDragSource(DependencyObject depO, bool ids)
{
depO.SetValue(IsDragSourceProperty, ids);
}
public static readonly RoutedEvent DragCompleteEvent = EventManager.RegisterRoutedEvent(
"DragComplete",
RoutingStrategy.Bubble,
typeof(RoutedEventHandler),
typeof(DragHelper)
);
public static void AddDragCompleteHandler(DependencyObject dependencyObject, RoutedEventHandler handler)
{
UIElement element = dependencyObject as UIElement;
if (element != null)
{
element.AddHandler(DragCompleteEvent, handler);
}
}
public static void RemoveDragCompleteHandler(DependencyObject dependencyObject, RoutedEventHandler handler)
{
UIElement element = dependencyObject as UIElement;
if (element != null)
{
element.RemoveHandler(DragCompleteEvent, handler);
}
}
private static void OnIsDragSourceChanged(DependencyObject depO, DependencyPropertyChangedEventArgs e)
{
(depO as TextBox).TextChanged += delegate
{
(depO as TextBox).RaiseEvent(new RoutedEventArgs(DragCompleteEvent, null));
};
}
}
}
Window1.xaml :
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<DataTemplate x:Key="Test">
<local:CustomControl
local:DragHelper.IsDragSource="True"
local:DragHelper.DragComplete="DragCompleteHandler" />
</DataTemplate>
</Window.Resources>
<ContentControl ContentTemplate="{StaticResource Test}"/>
</Window>