Прокрутка текста Silverlight и проблема максимальной ширины - PullRequest
1 голос
/ 28 августа 2010

Я пытаюсь прокрутить текст по экрану, который работает хорошо.

Обновление : я все еще сталкиваюсь с проблемой и теперь могу продемонстрировать ее в своем приложении:

  1. Перейдите на http://www.pokerdiy.com/poker-blinds-timer.aspx и выйдитеэто не полноэкранный режим.
  2. Нажмите на вкладку «Таймер» вверху.Затем нажмите «Начать турнир».Вверху справа появится прокручиваемое сообщение.На моем мониторе (22 дюйма) - это обрезается до того, как закончено предложение.
  3. Затем щелкните правой кнопкой мыши, чтобы изменить размер на полный экран, и перезапустите турнир, а затем снова запустите его, чтобы отобразить то же сообщение.Вы увидите, что теперь это работает!

Это большая проблема, поскольку я хочу прокручивать ДЛИННЫЕ сообщения вверху ... есть идеи, пожалуйста?

Краткое описание проблемы:

У меня есть текстовый блок с экрана справа, который не имеет установленной ширины и привязан к строковому значению.Я программно запускаю анимацию, которая изменяет значения From и To в CompositeTransform.TranslateX, чтобы переместить весь текстовый блок по экрану, чтобы создать видимость прокрутки.Ширина этого текстового блока автоматически настраивается на значение связанной строки, и я установил его как значение Анимация (отрицательное), чтобы оно убирало его с экрана влево (см. Код ниже).

Так что все это работаетфантастически ... НО не с длинными сообщениями.Кажется, есть ограничение по ширине для чего-то, что обрезает мой текст.В какой-то момент он обрезает его с ограничением ширины (последний символ визуализируется пополам, так что это не ограничение символа).Я настроил цикл для создания большой строки и вывода ActualWidth текстового блока, и он отображается как 17000 (что правильно).Ширина также хороша, и фактическое свойство Text показывает полную строку ... но пользовательский интерфейс обрезает ее в определенной точке, которую я не могу понять.

Итак - 1) Является ли этот подход приемлемым?(есть ли более простой способ?) и 2) Что вызывает усечение?

Спасибо!

Xaml: -

<Storyboard x:Name="StoryboardScrollText" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)">
<DoubleAnimation x:Name="StoryboardScrollTextAnimation" Storyboard.TargetName="txtSystemMessage" From="500" To="-740" Duration="0:0:30" />
</Storyboard>


<TextBlock x:Name="txtSystemMessage" TextWrapping="NoWrap" Text="{Binding TourneyMessage}" Foreground="White" FontSize="20" VerticalAlignment="Center" >
<TextBlock.RenderTransform>
<CompositeTransform TranslateX="0"/>
</TextBlock.RenderTransform>
</TextBlock>

Код: -

mainPage.StoryboardShowTourneyMessage.Begin();

//has to scroll the whole message off the screen (plus a bit extra as it starts off the screen)
//get the leftmost position of the logo so it starts just behind it  
mainPage.StoryboardScrollTextAnimation.From = GetPositionX(mainPage.NavigationGridLogo);
mainPage.StoryboardScrollTextAnimation.To = mainPage.txtSystemMessage.ActualWidth * -1 - 50;
mainPage.StoryboardScrollText.Begin();

MessageBox.Show(mainPage.txtSystemMessage.ActualWidth.ToString() + " " + mainPage.txtSystemMessage.Width.ToString());

1 Ответ

2 голосов
/ 13 сентября 2010

Часть 1: Если вы намерены сделать пиксель на основе анимация, используйте холст в качестве родительский объект. Сетка будет работать, но посмотрите причину вашей проблемы в части 2 (ниже)

Часть 2: В основном усечение вашего текст вызван родителем Контейнер обрезка ребенка. это происходит на основе ширины родительский и игнорирует смещение ваш текст.

Решение:

  • Если вы поместите TextBlock как ребенка холста, вместо сетки (или даже просто TextBlock внутри холста в вашей сетке), он будет отображать полная длина как холст по умолчанию никогда не обрезает своих потомков.

  • Возможно, вам понадобится добавить прямоугольник клипа на холст, чтобы скрыть какие-либо части текст, который расширяется, где вы делаете Не хочу видеть это, но это будет зависеть от того, какие другие компоненты на экране скрывают перекрытие. Если вы добавляете прямоугольник клипа, убедитесь, что вы анимировали текстовую позицию с помощью Canvas.Left, а не TranslateX, иначе вы можете снова получить исходную проблему!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...