2013-06-01 3 views
4

По какой-то странной причине текстовое поле WPF, встроенное в средство просмотра прокрутки, резко обрезается, как на изображении ниже, после того, как я добавил много текста к нему. Есть ли какой-то предел или что-то, что достигается, что я могу сделать больше или что-то еще?WPF TextBox получает отрезанный

enter image description here

Я не получаю никаких сообщений об ошибках.

Вот соответствующий Xaml:

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 
     <Button x:Name="Slice_Button" Content="Slice" HorizontalAlignment="Left" Margin="106,0,0,0" VerticalAlignment="Top" Click="Slice_Button_Click" Height="87" Background="#FF0D5B1E"/> 
     <Button x:Name="CancelButton" Content="Cancel" HorizontalAlignment="Left" Margin="232,0,0,0" VerticalAlignment="Top" Height="87" Click="Button_Click_1" Background="#FFC70E0E"/> 
     <ScrollViewer x:Name="Scroller" HorizontalAlignment="Left" Height="505" Margin="10,92,0,0" VerticalAlignment="Top" Width="436"> 
      <TextBox x:Name="OutBox" TextWrapping="Wrap" Text="Output will be displayed here" IsReadOnly="True" Margin="2"/> 
     </ScrollViewer> 

    </Grid> 

Вот C# я использую, чтобы добавить текст:

main.DispatchInvoke(() => 
      { 
       main.OutBox.Text += newText; 
       main.Scroller.ScrollToVerticalOffset(main.Scroller.ScrollableHeight); 
       main.Scroller.UpdateLayout(); 
      }); 
+1

чуваком, вывесить соответствующий код XAML ... –

+0

жаль Я забыл, но я добавил его сейчас – Gerharddc

+0

Извлеките 'Height' и' Width' из вещей. WPF не нуждается в этом. –

ответ

3

Второе обновление:

Ok, так что я решил получить комплект телефона для Windows и попробуйте это.

TextBox как указано в ОП, просто не прокручивается. Поэтому я решил посмотреть на это по умолчанию ControlTemplate

Это раздели ControlTemplate из vs2012 с Windows Phone 8 SDK для TextBox:

<ControlTemplate TargetType="TextBox"> 
    <Grid Background="Transparent"> 
    <!-- VisualState Groups for abt 100 lines --> 
    <Border x:Name="MainBorder" 
      Margin="{StaticResource PhoneTouchTargetOverhang}" 
      Background="{TemplateBinding Background}" 
      BorderBrush="{TemplateBinding BorderBrush}" 
      BorderThickness="{TemplateBinding BorderThickness}" /> 
    <Border x:Name="ReadonlyBorder" 
      Margin="{StaticResource PhoneTouchTargetOverhang}" 
      Background="Transparent" 
      BorderBrush="{StaticResource PhoneDisabledBrush}" 
      BorderThickness="{TemplateBinding BorderThickness}" 
      Visibility="Collapsed" /> 
    <Border Margin="{StaticResource PhoneTouchTargetOverhang}" 
      Background="Transparent" 
      BorderBrush="Transparent" 
      BorderThickness="{TemplateBinding BorderThickness}"> 
     <ContentControl x:Name="ContentElement" 
         Margin="{StaticResource PhoneTextBoxInnerMargin}" 
         HorizontalContentAlignment="Stretch" 
         VerticalContentAlignment="Stretch" 
         BorderThickness="0" 
         Padding="{TemplateBinding Padding}" /> 
    </Border> 
    </Grid> 
</ControlTemplate> 

Нет ScrollViewer просто ContentControl. Далее от vs2012 для настольного приложения TextBox

<ControlTemplate TargetType="{x:Type TextBox}"> 
    <Border x:Name="border" 
      Background="{TemplateBinding Background}" 
      BorderBrush="{TemplateBinding BorderBrush}" 
      BorderThickness="{TemplateBinding BorderThickness}" 
      SnapsToDevicePixels="True"> 
    <ScrollViewer x:Name="PART_ContentHost" 
        Focusable="False" 
        HorizontalScrollBarVisibility="Hidden" 
        VerticalScrollBarVisibility="Hidden" /> 
    </Border> 

Также проверяется это с Snoop путем копирования шаблона телефона на мой рабочий стол приложения и такое же поведение.

Не уверен, что причина в том, почему у него нет ScrollViewer, но добавление одного в ControlTemplate сортирует выпуск.

Решение:

Style Полный для TextBox с ScrollViewer (Добавлено в "App.xaml" -><Application.Resources></Application.Resources>

<Style x:Key="TextBoxStyle1" 
     TargetType="TextBox"> 
    <Setter Property="FontFamily" 
      Value="{StaticResource PhoneFontFamilyNormal}" /> 
    <Setter Property="FontSize" 
      Value="{StaticResource PhoneFontSizeMediumLarge}" /> 
    <Setter Property="Background" 
      Value="{StaticResource PhoneTextBoxBrush}" /> 
    <Setter Property="Foreground" 
      Value="{StaticResource PhoneTextBoxForegroundBrush}" /> 
    <Setter Property="BorderBrush" 
      Value="{StaticResource PhoneTextBoxBrush}" /> 
    <Setter Property="SelectionBackground" 
      Value="{StaticResource PhoneAccentBrush}" /> 
    <Setter Property="SelectionForeground" 
      Value="{StaticResource PhoneTextBoxSelectionForegroundBrush}" /> 
    <Setter Property="BorderThickness" 
      Value="{StaticResource PhoneBorderThickness}" /> 
    <Setter Property="Padding" 
      Value="2" /> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="TextBox"> 
     <Grid Background="Transparent"> 
      <VisualStateManager.VisualStateGroups> 
      <VisualStateGroup x:Name="CommonStates"> 
       <VisualState x:Name="Normal" /> 
       <VisualState x:Name="MouseOver" /> 
       <VisualState x:Name="Disabled"> 
       <Storyboard> 
        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="MainBorder" 
               Storyboard.TargetProperty="Background"> 
        <DiscreteObjectKeyFrame KeyTime="0" 
              Value="Transparent" /> 
        </ObjectAnimationUsingKeyFrames> 
        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="MainBorder" 
               Storyboard.TargetProperty="BorderBrush"> 
        <DiscreteObjectKeyFrame KeyTime="0" 
              Value="{StaticResource PhoneDisabledBrush}" /> 
        </ObjectAnimationUsingKeyFrames> 
        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentElement" 
               Storyboard.TargetProperty="Foreground"> 
        <DiscreteObjectKeyFrame KeyTime="0" 
              Value="{StaticResource PhoneDisabledBrush}" /> 
        </ObjectAnimationUsingKeyFrames> 
       </Storyboard> 
       </VisualState> 
       <VisualState x:Name="ReadOnly"> 
       <Storyboard> 
        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="MainBorder" 
               Storyboard.TargetProperty="Visibility"> 
        <DiscreteObjectKeyFrame KeyTime="0"> 
         <DiscreteObjectKeyFrame.Value> 
         <Visibility>Collapsed</Visibility> 
         </DiscreteObjectKeyFrame.Value> 
        </DiscreteObjectKeyFrame> 
        </ObjectAnimationUsingKeyFrames> 
        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ReadonlyBorder" 
               Storyboard.TargetProperty="Visibility"> 
        <DiscreteObjectKeyFrame KeyTime="0"> 
         <DiscreteObjectKeyFrame.Value> 
         <Visibility>Visible</Visibility> 
         </DiscreteObjectKeyFrame.Value> 
        </DiscreteObjectKeyFrame> 
        </ObjectAnimationUsingKeyFrames> 
        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ReadonlyBorder" 
               Storyboard.TargetProperty="Background"> 
        <DiscreteObjectKeyFrame KeyTime="0" 
              Value="{StaticResource PhoneTextBoxBrush}" /> 
        </ObjectAnimationUsingKeyFrames> 
        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ReadonlyBorder" 
               Storyboard.TargetProperty="BorderBrush"> 
        <DiscreteObjectKeyFrame KeyTime="0" 
              Value="{StaticResource PhoneTextBoxBrush}" /> 
        </ObjectAnimationUsingKeyFrames> 
        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentElement" 
               Storyboard.TargetProperty="Foreground"> 
        <DiscreteObjectKeyFrame KeyTime="0" 
              Value="{StaticResource PhoneTextBoxReadOnlyBrush}" /> 
        </ObjectAnimationUsingKeyFrames> 
       </Storyboard> 
       </VisualState> 
      </VisualStateGroup> 
      <VisualStateGroup x:Name="FocusStates"> 
       <VisualState x:Name="Focused"> 
       <Storyboard> 
        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="MainBorder" 
               Storyboard.TargetProperty="Background"> 
        <DiscreteObjectKeyFrame KeyTime="0" 
              Value="{StaticResource PhoneTextBoxEditBackgroundBrush}" /> 
        </ObjectAnimationUsingKeyFrames> 
        <ObjectAnimationUsingKeyFrames Storyboard.TargetName="MainBorder" 
               Storyboard.TargetProperty="BorderBrush"> 
        <DiscreteObjectKeyFrame KeyTime="0" 
              Value="{StaticResource PhoneTextBoxEditBorderBrush}" /> 
        </ObjectAnimationUsingKeyFrames> 
       </Storyboard> 
       </VisualState> 
       <VisualState x:Name="Unfocused" /> 
      </VisualStateGroup> 
      </VisualStateManager.VisualStateGroups> 
      <Border x:Name="MainBorder" 
        Margin="{StaticResource PhoneTouchTargetOverhang}" 
        Background="{TemplateBinding Background}" 
        BorderBrush="{TemplateBinding BorderBrush}" 
        BorderThickness="{TemplateBinding BorderThickness}" /> 
      <Border x:Name="ReadonlyBorder" 
        Margin="{StaticResource PhoneTouchTargetOverhang}" 
        Background="Transparent" 
        BorderBrush="{StaticResource PhoneDisabledBrush}" 
        BorderThickness="{TemplateBinding BorderThickness}" 
        Visibility="Collapsed" /> 
      <Border Margin="{StaticResource PhoneTouchTargetOverhang}" 
        Background="Transparent" 
        BorderBrush="Transparent" 
        BorderThickness="{TemplateBinding BorderThickness}"> 
      <ScrollViewer> 
       <ContentControl x:Name="ContentElement" 
           Margin="{StaticResource PhoneTextBoxInnerMargin}" 
           HorizontalContentAlignment="Stretch" 
           VerticalContentAlignment="Stretch" 
           BorderThickness="0" 
           Padding="{TemplateBinding Padding}" /> 
      </ScrollViewer> 
      </Border> 
     </Grid> 
     </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
</Style> 

использование:

<Grid x:Name="ContentPanel" 
     Grid.Row="1" 
     Margin="12,0,12,0"> 
    <Grid.RowDefinitions> 
    <RowDefinition Height="Auto" /> 
    <RowDefinition Height="*" /> 
    </Grid.RowDefinitions> 
    <StackPanel Grid.Row="0" 
       HorizontalAlignment="Center" 
       Orientation="Horizontal"> 
    <Button x:Name="Slice_Button" 
      Margin="10 0" 
      Background="#FF0D5B1E" 
      Content="Slice" /> 
    <Button x:Name="CancelButton" 
      Margin="10 0" 
      Background="#FFC70E0E" 
      Content="Cancel" /> 
    </StackPanel> 
    <TextBox x:Name="OutBox" 
      Grid.Row="1" 
      Margin="10" 
      IsReadOnly="True" 
      Style="{StaticResource TextBoxStyle1}" 
      Text="Output will be displayed here" 
      TextWrapping="Wrap" /> 
</Grid> 

ли банкнота просто обернув TextBox в ScrollViewer весь контроль свитка, чем просто содержание в нем, не может быть очень привлекательными из UX POV

Скачать Ссылку Пример проекта С выше исправлениями: DropBox

+0

Windows Phone WPF не имеет DockPanel – Gerharddc

+0

@ Gerhman oh i'm soz abt, что тогда. хорошо, если у него есть сетка, возможно, даже с этим ... плохо обновить мой ответ за секунду. – Viv

+0

@ Герман переключил «DockPanel» на «Grid» с 2 'RowDefinitions', чтобы получить такое же поведение. Надеюсь, что это сработает. – Viv