2012-02-14 2 views
0

Я создал пользовательский элемент управления с помощью текстового блока. Но это не обернется. Эти пользовательские серверы управления являются списком. Шаблонtextblock в пользовательском контроле 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

+0

Второй - descriptionTextBox – Nickolodeon

ответ

4

A ListBox по умолчанию автоматически не ограничивает ширину его элементов, но вместо этого использует ScrollViewer, который показывает горизонтальную полосу прокрутки, когда элемент шире, чем ListBox.

Вы можете удалить ScrollViewer, заменив ListBox-х Template:

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

Другая важная вещь, чтобы отметить, что StackPanel в верхнего уровня сетки не будет правильно изменить размер содержащихся в нем элементов. В следующем упрощенном примере текст в 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

+0

Возможно, вы должны опустить горизонтальную StackPanel и определить (два?) Столбца для сетки верхнего уровня. Если бы только ваш XAML был бы более читабельным ... Пожалуйста, подумайте о лучшем форматировании. – Clemens

+0

Горизонтальная панель стека есть, так что, когда изображение слева увеличивается, тогда все содержимое прав переместится - это предназначено. О форматировании - я могу сделать несколько более последовательное отступы, но не вижу никаких других проблем с ним. – Nickolodeon

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