2012-02-14 56 views
0

我使用文本块创建了用户控件。但它不会包装。这个用户控制服务器作为一个listboxitem。textblock in user control TextWrapping not wrapping

<Grid x:Name="MainGrid" Height="Auto" Width="Auto"> 

    <StackPanel Orientation="Horizontal"> 


     <Image Height="50" Width="100" Stretch="Uniform" Name="image1" Source="{Binding Path=VideoImageUrl}" Margin="12,12,13,84" MouseLeftButtonDown="image1_MouseLeftButtonDown" MouseEnter="image1_MouseEnter" MouseLeave="image1_MouseLeave" /> 

      <StackPanel Orientation="Vertical" > 


      <TextBlock TextWrapping="Wrap" Height="Auto" HorizontalAlignment="Left" Name="titleTextBox" 
        Text="{Binding Path=Title, Mode=TwoWay, ValidatesOnExceptions=true, NotifyOnValidationError=true}" 
        VerticalAlignment="Center" Width="Auto" FontSize="14" FontWeight="SemiBold" /> 
      <StackPanel Orientation="Vertical" x:Name="StackPanelDetails"> 

        <TextBlock Height="Auto" HorizontalAlignment="Left" Name="desciptionTextBox" 
           TextWrapping="Wrap" 
        Text="{Binding Path=Desciption, Mode=OneWay, ValidatesOnExceptions=true, NotifyOnValidationError=true}" 
        VerticalAlignment="Center" Width="Auto" /> 

       <Line /> 
       <ItemsControl x:Name="CustomItemsSource" ItemsSource="{Binding Path=LinksList}" > 

       <ItemsControl.ItemTemplate> 
        <DataTemplate> 
         <TextBlock> 
          <Hyperlink NavigateUri="{Binding Path=TopicUrl}" RequestNavigate="Hyperlink_RequestNavigate" > 
           <TextBlock Text="{Binding Path=TopicName}" /> 
          </Hyperlink> 
         </TextBlock> 
        </DataTemplate> 
       </ItemsControl.ItemTemplate> 

      </ItemsControl> 
      </StackPanel> 

     </StackPanel> 

    </StackPanel> 


</Grid> 
+0

哪TextBlock你的意思是?我看到至少有两个TextWrapping =“Wrap”。 – Clemens 2012-02-14 11:18:07

+0

第二个 - descriptionTextBox – Nickolodeon 2012-02-14 12:19:34

回答

4

列表框的默认模板不自动限制其项的宽度,而是使用了的ScrollViewer,其示出了水平滚动条,当一个项目比列表框宽。

<ListBox ...> 
    <ListBox.Template> 
     <ControlTemplate> 
      <StackPanel IsItemsHost="True"/> 
     </ControlTemplate> 
    </ListBox.Template> 
    ... 
</ListBox> 

另一个重要的事情要注意的是一个StackPanel中的顶级电网将不能正确调整包含的元素:

您可以通过更换ListBox的Template删除的ScrollViewer。在下面的简单示例中的TextBlock 文本不裹因为含有StackPanel中只是作为您期望不调整它的大小:

<Grid> 
    <StackPanel Orientation="Horizontal"> 
     <Image ... /> 
     <Text TextWrapping="Wrap" Text=... /> 
    </StackPanel> 
</Grid> 

这样,它的工作原理像您期望:

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto"/> 
     <ColumnDefinition/> 
    </Grid.ColumnDefinitions> 
    <Image ... /> 
    <TextBlock Grid.Column="1" TextWrapping="Wrap" Text=... /> 
</Grid> 
+0

非常感谢,这做了一些修复 - listboxitem本身正在包装。不幸的是,textblox文本仍然没有包装。 – Nickolodeon 2012-02-14 15:40:54

+0

您应该省略水平的StackPanel并为顶层Grid定义(两个?)列。如果只有你的XAML更具可读性......请考虑更好的格式。 – Clemens 2012-02-14 15:49:44

+0

水平堆栈面板在那里,因此当左侧图像放大时,权限上的所有内容都会滑过 - 这是预期的。关于格式化 - 我可以做一个更一致的缩进,但没有看到任何其他问题。 – Nickolodeon 2012-02-14 15:54:25