Кажется, вы используете ноутбук Juypter. Это всегда показывает какой-либо автогенерированный выход (например, цифры matplotlib), последний на выходе.
Вы можете использовать IPython.display.display
для отображения цифр в позиции выхода, где они принадлежат.
import matplotlib.pyplot as plt
import numpy as np
from IPython.display import display
images = [np.random.rayleigh((i+1)/8., size=(180, 200, 3)) for i in range(4)]
dog_detector = lambda x: np.random.choice([True,False])
dog_counter = 0
for i in range(len(images)):
if dog_detector(images[i]):
dog_counter+=1
fig, ax = plt.subplots(figsize=(3,2))
ax.imshow(images[i])
display(fig)
display("That's a dog!!!!")
display("______________")
else:
display("______________")
fig, ax = plt.subplots(figsize=(3,2))
ax.imshow(images[i])
display(fig)
display("No Doggo up here :(")
display("______________")
perc = (dog_counter/float(len(images)))*100
display("{}% of the dog pictures are classified as dogs".format(perc))
plt.close()
Выход:
Ничего. Поскольку тип свойства Type
, синтаксический анализатор XAML знает, чтобы попытаться преобразовать все, что вы поставили в Type
. В других сценариях тип свойства может быть менее специфичным (например, Object
), и именно там вам нужно расширение разметки, в противном случае анализатор XAML будет просто интерпретировать ваше значение как String
.
Извините за то, что выкалываете такую старую нить, но я чувствую, что это того стоит. Недавно я столкнулся с ситуацией, которая показывает, что x:Type
отличается от TypeName-as-String
.
По моему опыту -
x:Type
учитывает сильное имя или версию сборки, но не TypeName-as-String
.
Я объяснил свой сценарий и другие подробности в моем блоге здесь -
Значение указания типа AncestorType с x: Введите RelativeSourceBinding
Кроме того, есть также разница в том, как WPF вводит тип. Для x:Type
используется TypeExtension
, тогда как для TypeName-as-String
FrameworkElementFactory
используется.
В соответствии с MSDN - x : Расширение разметки типа
Свойства типа, которые поддерживают Typename-as-String
WPF поддерживает методы, которые позволяют указывать значение некоторых свойств типа Тип без необходимости использование расширения расширений
blockquote>x:Type
. Вместо этого вы можете указать значение как строку, которая называет тип. Примерами этого являютсяControlTemplate.TargetType
иStyle.TargetType
. Поддержка такого поведения не обеспечивается ни с помощью преобразователей типов, ни с расширений разметки. Вместо этого это поведение отсрочки осуществляется черезFrameworkElementFactory
.
Помимо реального различия, описанного выше, использование {x: Тип NameOfType}, очевидно, будет выделено по-разному в вашей среде IDE и будет выделяться и сразу же указывать (в отличие от обычной строки). Так что это мое личное предпочтение.