2016-12-09 4 views
-1

グリッド内のTextBlockのTextWrappingは、TexBlock Widthを指定した場合にのみ機能しますか?グリッド内のTextBlockのTextWrappingは、TexBlock Widthを指定した場合にのみ機能しますか?

TextBlock MaxWidthプロパティを削除すると、TextWrappingが機能しません。コンボボックス

<Window Height="600" Width="480"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="4*"></ColumnDefinition> 
      <ColumnDefinition Width="*"></ColumnDefinition> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition></RowDefinition> 
      <RowDefinition></RowDefinition> 
     </Grid.RowDefinitions> 
     <ComboBox Grid.Row="0" Grid.Column="0" ItemsSource="{Binding MyList}" SelectedIndex="0" x:Name="comboBox" HorizontalAlignment="Stretch" VerticalAlignment="Top"> 
      <ComboBox.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Orientation="Horizontal"> 
         <TextBlock Margin="2" Text="{Binding Code}"></TextBlock> 
         <TextBlock Margin="2" Text="{Binding Name}"></TextBlock> 
        </StackPanel> 
       </DataTemplate> 
      </ComboBox.ItemTemplate> 
      <ComboBox.ItemContainerStyle> 
       <Style TargetType="ComboBoxItem"> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate> 
           <Grid ShowGridLines="False"> 
            <Grid.ColumnDefinitions> 
             <ColumnDefinition MaxWidth="50"/> 
             <ColumnDefinition Name="Column1" MaxWidth="300"/> 
            </Grid.ColumnDefinitions> 
            <TextBlock Grid.Column="0" Text="{Binding Code}"/> 
            <TextBlock Grid.Column="1" MaxWidth="{Binding ElementName=Column1, Path=MaxWidth}" Text="{Binding Name}" TextWrapping="Wrap"/> 
           </Grid> 
          </ControlTemplate> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </ComboBox.ItemContainerStyle> 
     </ComboBox> 
    </Grid> 
</Window> 
+0

はあなたの問題を完全に再現可能なサンプルを提供してください。たとえば、グリッドの親要素は何ですか? – mm8

+0

[TextBlock TextWrapping not wrapping#2]の複製があります。(http://stackoverflow.com/questions/16221073/textblock-textwrapping-not-wrap-2) –

+0

コンボボックスのフルコードを追加しました。 –

答えて

1

グリッド内のTextBlockのTextBrappingは、TexBlock Widthを指定した場合にのみ機能しますか?

ComboBoxを開いたときに目に見えないScrollViewerにグリッドが追加されるためです。あなたはこれを修正してもらうテキストを単に無効にコンボボックスのScrollViewer.Horizo​​ntalScrollBarVisibility添付プロパティを設定することでラップすることができます:

<ComboBox Grid.Row="0" Grid.Column="0" ItemsSource="{Binding MyList}" 
       SelectedIndex="0" x:Name="comboBox" HorizontalAlignment="Stretch" 
       VerticalAlignment="Top" ScrollViewer.HorizontalScrollBarVisibility="Disabled"> 
     <ComboBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <TextBlock Margin="2" Text="{Binding Code}"></TextBlock> 
        <TextBlock Margin="2" Text="{Binding Name}"></TextBlock> 
       </StackPanel> 
      </DataTemplate> 
     </ComboBox.ItemTemplate> 
     <ComboBox.ItemsPanel> 
      <ItemsPanelTemplate> 
       <StackPanel Width="100" /> 
      </ItemsPanelTemplate> 
     </ComboBox.ItemsPanel> 
     <ComboBox.ItemContainerStyle> 
      <Style TargetType="ComboBoxItem"> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate> 
          <Grid ShowGridLines="False"> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition MaxWidth="50"/> 
            <ColumnDefinition MaxWidth="300"/> 
           </Grid.ColumnDefinitions> 
           <TextBlock Grid.Column="0" Text="Code..."/> 
           <TextBlock Grid.Column="1" 
              Text="some long text some long text some long text some long text some long text" 
              TextWrapping="Wrap"/> 
          </Grid> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </ComboBox.ItemContainerStyle> 
    </ComboBox> 

2

ため

完全なコードの理由は、あなたが消費するあなたのTextBlockのために利用できるサイズを制限することは何もありませんnot setting it at allAutoまたは*としてあなたColumnDefinitionを定義することですか。したがって、テキストは折り返されないことが期待されます。したがって、折り返しが機能するように、ColumnDefinitionまたはTextBlockのいずれかにWidthまたはMaxWidthを直接定義する必要があります。

+0

ColumnDefinitionのMaxWidthを定義しましたが、TextWrappは機能しません。これは、TextBlockのMaxWidthを定義する場合にのみ機能します。どうして? –

+0

列の幅を指定しないと、テキストボックスデータが列をオーバーフローします。代わりに、列とテキストボックスの両方に固定幅を与えることができます。実際には、テキストボックスのmaxwidthは、ラッピングが機能するように強制的に指定する必要があります。それ以外の場合は、テキストが入力されている間、その幅が自動的に増加します。 – ViVi

関連する問題