WPF InlineUIContainer неправильно отображает изображенияC#

Место общения программистов C#
Ответить
Anonymous
 WPF InlineUIContainer неправильно отображает изображения

Сообщение Anonymous »

Я столкнулся с проблемой, связанной с тем, как InlineUIContainer распределяет размер изображения при использовании в TextBlock, и не могу найти способ обойти ее.
Вот простое приложение 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
— изображение размером 100 х 100 пикселей. Я добавил рамку с фоном вокруг изображения, чтобы показать занимаемое пространство. Такое же поведение наблюдается, когда единственным дочерним элементом InlineUIContainer является изображение. При первой визуализации изображение выглядит корректным, однако если изображение удалить и повторно добавить вручную, очистив и добавив свойство Inlines TextBlock, пространство, выделенное для изображения, станет полной шириной, как будто свойство StretchDirection не принимается во внимание.
Некоторые примеры, показывающие проблему:
Во-первых, размер полной ширины без настройки StretchDirection: Изображение

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

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

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

Подробнее здесь: https://stackoverflow.com/questions/798 ... ncorrectly
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»