2012-02-14 17 views
0

私はテキストブロックでユーザーコントロールを作成しました。しかし、それはラップされません。このユーザはリストボックス項目としてサーバを制御します。ユーザーコントロール内のテキストブロック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"で少なくとも2つを見ます。 – Clemens

+0

2番目の1つ - descriptionTextBox – Nickolodeon

答えて

4

Aリストボックスのデフォルトのテンプレートが自動的にそのアイテムの幅を制限するものではありませんが、代わりに項目がリストボックスよりも広い場合に水平スクロールバーが表示さScrollViewerのは、使用しています。

あなたは、リストボックスのTemplateを置き換えることにより、ScrollViewerのを削除することができます

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

注意すべきもう一つの重要なことは、最上位のグリッド内のStackPanelが適切に含まれる要素のサイズを変更しないということです。期待どおり含むStackPanelのは、単にそれをリサイズしていないため、次の簡単な例ではTextBlockの内のテキストがに包まれていません。

<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

関連する問題