Вот простое приложение WPF, демонстрирующее проблему:
Код: Выделить всё
Код: Выделить всё
public partial class MainWindow : Window
{
private InlineUIContainer container = new InlineUIContainer(new Border()
{
Child = new Image()
{
Source = new BitmapImage(new Uri("pack://application:,,,/Smiley.png"))
},
Background = Brushes.Red
});
public MainWindow()
{
InitializeComponent();
tb.Inlines.Add(container);
}
private void Button_Click(object sender, RoutedEventArgs e)
{
if (tb.Inlines.Count == 0)
{
tb.Inlines.Add(container);
}
else
{
tb.Inlines.Clear();
}
}
}
Код: Выделить всё
Smiley.pngНекоторые примеры, показывающие проблему:
Во-первых, размер полной ширины без настройки StretchDirection:
Код: Выделить всё

Теперь для свойства StretchDirection установлено значение DownOnly. Первоначально изображение отображается правильно:

Двойное нажатие кнопки переключения, чтобы удалить, а затем повторно добавить изображение, приводит к тому, что изображение отображается с правильным размером 100 x 100 пикселей, но оно занимает всю ширину изображения. TextBlock:

Проект, в котором я столкнулся с этой ошибкой, гораздо более сложен, чем этот пример, и включает ограничения на способы решения проблемы. Установка свойства StretchDirection на самом изображении позволит ему правильно отображаться каждый раз, когда оно отображается, но я не могу этого сделать, все свойства Image должны быть установлены в стиле. Удаление/добавление встроенных строк в TextBlock функционально аналогично переключению видимости, но в моем случае я переключаюсь между несколькими наборами встроенных строк, а не просто удаляю и добавляю, поэтому любое решение, не предполагающее непосредственного управления свойством Inlines, непригодно для использования. Если свойство Inlines очищается и добавляется одним нажатием кнопки, эта проблема не возникает, однако из-за необходимости переключения между несколькими наборами встроенных строк это также бесполезное решение.
Есть какие-нибудь подсказки о том, почему это происходит и что можно сделать, чтобы устранить проблему с учетом данных ограничений?
Подробнее здесь: https://stackoverflow.com/questions/798 ... ncorrectly
Мобильная версия