Я решил эту проблему некоторое время назад. Существует не очень хороший способ, о котором я знаю. Это будет работать, хотя это просто больно.
Чтобы упростить объяснение, почему бы нам не предположить, что изображение находится в верхнем правом углу страницы, а текст должен быть слева и ниже изображения.
Начните с размещения текстового блока и изображения рядом.
Рассчитывает самую нижнюю точку TextBlock и самую нижнюю точку изображения. (Используйте их верхние поля и фактические высоты.
Когда текстовый блок больше, вы перемещаете слово за раз во вновь созданный текстовый блок под изображением. Это создает иллюзию переноса текста.
leftText.Text = textToWrap;
bottomText.Text = string.Empty;
Stack<string> wordsToMove = new Stack<string>();
double imageBottomPoint = image1.ActualHeight + image1.Margin.Top;
while ((leftText.ActualHeight + leftText.Margin.Top) > (imageBottomPoint + 14))
{
int lastSpace = leftText.Text.LastIndexOf(' ');
string textToMove = leftText.Text.Substring(lastSpace).Trim();
BlockedText.Text = leftText.Text.Remove(lastSpace);
wordsToMove.Push(textToMove + ' ');
}
StringBuilder sb = new StringBuilder(bottomText.Text);
while (wordsToMove.Count > 0)
{
sb.Append(wordsToMove.Pop());
}
bottomText.Text = sb.ToString();