Вы можете попробовать явно указать тип BaseException. Тем не менее, это будет ловить только производные от BaseException. Хотя это включает в себя все предоставляемые реализацией исключения, также возможно вызывать произвольные классы старого стиля.
try:
do_something()
except BaseException, e:
logger.error('Failed to do something: ' + str(e))
Мы можем сделать это, получив ScrollViewer , который присутствует в ControlTemplate ListView. Если у вас есть доступ к ScrollViewer, то есть много различных методов прокрутки.
Во-первых, мы можем создать ListView, к которому мы хотим добавить этот эффект:
<ListView ItemsSource="{Binding Percents}"
SelectionChanged="OnSelectionChanged"
x:Name="uiListView"/>
public List<int> Percents { get; set; }
public Window1()
{
InitializeComponent();
Percents = new List<int>();
for (int i = 1; i <= 100; i++)
{
Percents.Add(i);
}
this.DataContext = this;
}
Нам также понадобится то, что мы можем использовать для получения ScrollViewer из ListView. Раньше я использовал нечто подобное для работы с настраиваемой прокруткой, и мы можем использовать это и здесь.
public static DependencyObject GetScrollViewer(DependencyObject o)
{
if (o is ScrollViewer)
{ return o; }
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(o); i++)
{
var child = VisualTreeHelper.GetChild(o, i);
var result = GetScrollViewer(child);
if (result == null)
{
continue;
}
else
{
return result;
}
}
return null;
}
Теперь нам просто нужно обработать событие SelectionChanged. Поскольку мы пытаемся прокрутить элемент в начало списка, лучший вариант - прокрутить вниз, а затем повторно прокрутить вверх до выбранного элемента. Как вы сказали, ScrollIntoView будет прокручиваться до тех пор, пока элемент не станет видимым,
-Wno-multichar :
Не предупреждать, если используется многосимвольная константа ('FOOF'). Обычно указывают на опечатку в код пользователя, поскольку они имеют значения, определяемые реализацией, и не должны использоваться в переносимый код.