2016-03-02 3 views
1

Не уверен, что это ошибка или что-то, но ни один из моих текстовых полей не разрешает горизонтальную прокрутку. Я пробовал различные способы решения, но пока ничего не выиграл. Чтобы быть конкретным, я хочу иметь возможность выбирать текст и перетаскивать влево/вправо, чтобы показать переполнение.Однострочный переполнения TextBox unscrollable

Сначала я начал с удаления любых стилей, предназначенных для TextBox.

Затем я добавил некоторые свойства, как HorizontalScrollBarVisibility=Visible, VerticalScrollBarVisibility=Disabled, AcceptsReturn=False, TextWrapping=NoWrap ...

До сих пор, добавляя какие-либо из перечисленных выше свойств не делает ничего.

Есть ли свойство, которого я отсутствует, или обработчик событий, который мне нужно добавить для этого?

Редактировать

Забыл упомянуть, фактические полосы прокрутки показывает (по горизонтали), но это не позволяет перетащить выбранный текст влево/вправо. Я просто удалил стиль, который нацелен на ScrollBar, но это, похоже, не мешает.

Edit 2

Простой пример:

<TextBox 
    Text="Lots of text to cause overflow" 
    HorizontalScrollBarVisibility="Visible" 
    VerticalScrollBarVisibility="Disabled" 
    AcceptsReturn="False" 
    TextWrapping="NoWrap"/> 

example

Редактировать 3

Выпуск вытекающих из стиля я использую целевой ScrollViewer, хотя я Не уверен, причина:

<Style TargetType="{x:Type ScrollViewer}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ScrollViewer}"> 
       <Grid> 
        <ScrollContentPresenter Grid.Column="0" /> 
        <ScrollBar x:Name="PART_VerticalScrollBar" HorizontalAlignment="Right" Value="{TemplateBinding VerticalOffset}" Maximum="{TemplateBinding ScrollableHeight}" ViewportSize="{TemplateBinding ViewportHeight}" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" /> 
        <ScrollBar x:Name="PART_HorizontalScrollBar" Orientation="Horizontal" VerticalAlignment="Bottom" Value="{TemplateBinding HorizontalOffset}" Maximum="{TemplateBinding ScrollableWidth}" ViewportSize="{TemplateBinding ViewportWidth}" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" /> 
        <!--<Rectangle Grid.Row="1" Grid.Column="1" Fill="Red"/>--> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Edit 4

По предложению Сакуры, у меня есть:

<ControlTemplate TargetType="{x:Type ScrollViewer}"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*"/> 
      <ColumnDefinition Width="Auto"/> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="*"/> 
      <RowDefinition Height="Auto"/> 
     </Grid.RowDefinitions> 
     <ScrollContentPresenter Grid.Row="0" Grid.Column="0"/> 
     <ScrollBar Grid.Row="0" Grid.Column="1" x:Name="PART_VerticalScrollBar" HorizontalAlignment="Right" Value="{TemplateBinding VerticalOffset}" Maximum="{TemplateBinding ScrollableHeight}" ViewportSize="{TemplateBinding ViewportHeight}" Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" /> 
     <ScrollBar Grid.Row="1" Grid.Column="0" x:Name="PART_HorizontalScrollBar" Orientation="Horizontal" VerticalAlignment="Bottom" Value="{TemplateBinding HorizontalOffset}" Maximum="{TemplateBinding ScrollableWidth}" ViewportSize="{TemplateBinding ViewportWidth}" Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" /> 
    </Grid> 
</ControlTemplate> 

Но это все еще не работает ...

+0

Что вы XAML? – TreeTree

+0

Добавлен пример в исходное сообщение. –

+0

Ваш код выше не является кодом XAML. Нет атрибута 'TextWrap'' TextBox'. – Sakura

ответ

1

Проблема заключается ScrollViewer стиль автонастройки для ваш TextBox. Вы можете проверить это путем изменения <Grid> до <Grid Background="Yellow"> в стиле.

Вы переопределяете его, но не устанавливаете CanContentScroll="True" в ScrollContentPresenter.

Изменение:

<ScrollContentPresenter Grid.Row="0" Grid.Column="0"/> 

To:

<ScrollContentPresenter CanContentScroll="True"/> 
+0

Итак, как мне изменить стиль ScrollViewer, чтобы он не перекрывал переполнение? Я понял причину, по которой я поставил этот стиль там, в первую очередь потому, что мой стиль, ориентированный на ScrollBar, оставил бы белый квадрат в идеальной форме в нижнем правом углу ScrollViewer, так что необходимость в нем имеет решающее значение. Ориентация на них исключает необходимость добавления стиля вручную к каждому из них, что, учитывая количество, которое у меня есть, было бы болью, чтобы пройти и добавить/управлять. –

+0

Подождите. Я покажу вам, как это сделать. – Sakura

+0

См. Четвертое редактирование. Я сделал это без везения. –

Смежные вопросы