2013-06-01 128 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

第二次更新:

好了,所以我決定讓Windows手機套件,並嘗試了這一點。

TextBox由於OP提到只是不會滾動。因此,我決定看看它的默認ControlTemplate

這是剝奪了從vs2012 ControlTemplate隨着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> 

而且通過複製手機模板,我的桌面應用程序,同樣的行爲與探聽驗證了這一點。

不知道爲什麼它沒有ScrollViewer的推理,但在ControlTemplate中加入一個將問題排序。

解決方案:

全部StyleTextBoxScrollViewer(由內 「的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 in a ScrollViewer滾動的整個控制不僅僅是其中的內容可能不是非常有吸引力來自UX POV

下載鏈接到示例項目通過上面的解決辦法:DropBox

+0

Windows Phone WPF沒有DockPanel – Gerharddc

+0

@Gerhman哦,我是soz abt那麼。以及如果它有一個網格,甚至可能...在一秒內更新我的答案 – Viv

+0

@Gerhman用'RowDefinitions'將'DockPanel'切換到'Grid'以獲得相同的行爲。希望工程。 – Viv