2012-06-13 39 views
2

有人可以告诉我为什么Wrapping不能处理这些文本块吗? 我只是不知道为什么,我改变了我的一切stackpanels到网格,以避免无限空间的问题,但它仍然没有工作...Textblock textwrapping无法正常工作

<Border x:Name="SummaryRightSideContainerBorder" Grid.Column="1" 
     Margin="10,10,10,10" BorderBrush="Black" 
     BorderThickness="1"> 
    <ContentControl x:Name="SummaryRightSideContainerContentControl" Content="{Binding SelectedItem, ElementName=SummaryTreeView}"> 
     <ContentControl.Resources> 
      <DataTemplate DataType="{x:Type ViewModelsProject:ProjectViewModel}"> 
       <StackPanel> 
        <TextBlock Text="Displaying Project DataContract stuff..." /> 
       </StackPanel> 
      </DataTemplate> 
      <DataTemplate DataType="{x:Type ViewModelsProject:SequenceViewModel}"> 
       <StackPanel> 
        <TextBlock Text="Displaying Sequence DataContract stuff..." /> 
       </StackPanel> 
      </DataTemplate> 
      <DataTemplate DataType="{x:Type ViewModelsProject:GroupViewModel}"> 
       <StackPanel> 


        <DataGrid Margin="10" AutoGenerateColumns="False" 
            Background="Transparent" BorderThickness="0" 
            CanUserAddRows="False" 
            CellStyle="{DynamicResource dgCellStyle}" 
            ColumnHeaderStyle="{DynamicResource dgHeader}" 
            DataContext="{Binding ElementName=SummaryTreeView, 
                 Path=SelectedItem}" 
            GridLinesVisibility="None" 
            ItemsSource="{Binding Standards}" 
            Padding="0" RowHeaderWidth="0" ScrollViewer.HorizontalScrollBarVisibility="Disabled"> 
         <DataGrid.Resources> 
          <Style x:Key="dgHeader" TargetType="{x:Type DataGridColumnHeader}"> 
           <Setter Property="Template"> 
            <Setter.Value> 
             <ControlTemplate TargetType="{x:Type DataGridColumnHeader}"> 
              <TextBlock Width="{TemplateBinding Width}" 
                  Padding="5" 
                  Text="{TemplateBinding Content}" 
                  TextAlignment="Left"> 
                <TextBlock.Background> 
                 <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> 
                  <GradientStop Offset="0.0" Color="#373638" /> 
                  <GradientStop Offset="1.0" Color="#77797B" /> 
                 </LinearGradientBrush> 
                </TextBlock.Background> 
              </TextBlock> 
             </ControlTemplate> 
            </Setter.Value> 
           </Setter> 
           <Setter Property="OverridesDefaultStyle" Value="True" /> 
           <Setter Property="Background" Value="Green" /> 
           <Setter Property="Foreground" Value="White" /> 
           <Setter Property="FontSize" Value="12" /> 
           <Setter Property="Background"> 
            <Setter.Value> 
             <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> 
              <GradientStop Offset="0.0" Color="#373638" /> 
              <GradientStop Offset="1.0" Color="#77797B" /> 
             </LinearGradientBrush> 
            </Setter.Value> 
           </Setter> 
          </Style> 
          <Style x:Key="dgCellStyle" TargetType="{x:Type DataGridCell}"> 
           <Style.Triggers> 
            <Trigger Property="DataGridCell.IsSelected" Value="True"> 
             <Setter Property="Background" Value="White" /> 
             <Setter Property="Foreground" Value="Black" /> 
             <Setter Property="BorderThickness" Value="0" /> 
            </Trigger> 
           </Style.Triggers> 
          </Style> 
         </DataGrid.Resources> 
         <DataGrid.Columns> 
          <DataGridTemplateColumn Header="Standards"> 
           <DataGridTemplateColumn.CellTemplate> 
            <DataTemplate> 


             <Grid Margin="5"> 
              <Grid.RowDefinitions> 
               <RowDefinition /> 
               <RowDefinition /> 
              </Grid.RowDefinitions> 
              <TextBlock Grid.Row="0" Text="{Binding Path=StepMaster.Description}" VerticalAlignment="Center" FontWeight="SemiBold"/> 
              <Grid Grid.Row="1"> 
               <Grid.RowDefinitions> 
                <RowDefinition /> 
                <RowDefinition /> 
                <RowDefinition /> 
               </Grid.RowDefinitions> 
               <Grid.ColumnDefinitions> 
                <ColumnDefinition Width="Auto" /> 
                <ColumnDefinition Width="*" /> 
               </Grid.ColumnDefinitions> 
               <TextBlock Grid.Row="0" Grid.Column="0" Text="Standard: " VerticalAlignment="Top"/> 
               <TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding Path=Standard}" Margin="5,0,0,0" VerticalAlignment="Top" TextWrapping="Wrap"/> 

               <TextBlock Grid.Row="1" Grid.Column="0" Text="Details: " VerticalAlignment="Top"/> 
               <TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding Path=Details}" Margin="5,0,0,0" VerticalAlignment="Top" TextWrapping="Wrap"/> 

               <TextBlock Grid.Row="2" Grid.Column="0" Text="Comments: " VerticalAlignment="Top"/> 
               <TextBlock Grid.Row="2" Grid.Column="1" Text="{Binding Path=Comments}" Margin="5,0,0,0" VerticalAlignment="Top" TextWrapping="Wrap"/> 
              </Grid> 
             </Grid> 

            </DataTemplate> 
           </DataGridTemplateColumn.CellTemplate> 
          </DataGridTemplateColumn> 
         </DataGrid.Columns> 
        </DataGrid> 


       </StackPanel> 
      </DataTemplate> 
      <DataTemplate DataType="{x:Type ViewModelsProject:StepViewModel}"> 
       <UniformGrid Rows="3"> 
        <TextBlock Margin="10" FontWeight="DemiBold" 
           Text="Standards" /> 
        <TextBlock Margin="10" FontWeight="DemiBold" 
           Text="Standards Details" /> 
        <StackPanel Orientation="Vertical"> 
         <DataGrid Margin="10" AutoGenerateColumns="False" 
          <Another data grid is here /> 
         </DataGrid> 
        </StackPanel> 
       </UniformGrid> 
      </DataTemplate> 
     </ContentControl.Resources> 
    </ContentControl> 
</Border> 
+0

设置所有RowDefinition Height =“Auto”。尝试一个硬宽度不是最终答案,而是看看会发生什么。 – Paparazzi

+0

它现在使用进行包装,但我不希望在该列上放置固定的宽度,因为用户可能想要展开窗口,并且看上去“有趣”... –

+0

我想它可能由''尝试将* Width改变为* *或特定值,如* Carlos H *所示。 –

回答

3

原来,使这项工作的唯一方法是直接在DataGrid中使用属性:

MaxWidth="{Binding ElementName=SummaryRightSideContainerBorder, Path=ActualWidth}" ColumnWidth="*" 

MaxWidth用于使Datagrid本身不超过其容器边界,并使用ColumnWidth以便列使用数据网格中可用空间的100%。

Blam的回答让我找到了解决方案的正确途径。

1

作为一个答案,你需要设置第二列

<ColumnDefinition Width="*"/> 

所以它受到限制。 *表示容器的大小。现在,它正在成长的容器外(屏幕)

第一列汽车是OK

+0

我认为这将工作,但它没有,只要我将第二列宽度从“200”更改为“*”它停止再次包装...也许这是TemplateColumn干扰网格的正常行为,但我我不确定。 –

+0

发布您的当前xaml – Paparazzi

+0

我刚刚发布了我的完整xaml,我该如何给一个人点数? –