2009-12-11 4 views
16

Silverlight 4 Betaで単純なDataGridを作成しようとしていますが、Note列をワードラップにする方法がわかりません。Silverlightでテキストを折り返す方法DataGridTextColumn

表は注文時に作成されたメモを表しているため、可変長です。私は 'Note'セルを内容に合わせて縦方向に拡大したい。

私は多くの同様の質問を見つけましたが、答えはありませんでした。これに対処するSilverlight 4の新機能がありますか?

<data:DataGrid AutoGenerateColumns="False" Name="dataGrid1" IsReadOnly="True"> 
     <data:DataGrid.Columns> 
      <data:DataGridTextColumn Header="Date" Binding="{Binding Date}" /> 
      <data:DataGridTextColumn Header="User" Binding="{Binding User}" /> 
      <data:DataGridTextColumn Header="Note" Binding="{Binding Note}" /> 
     </data:DataGrid.Columns> 
    </data:DataGrid> 

答えて

24

テキスト列の代わりにDataGridTemplateColumnを使用します。そこでのTextBlockを持って、それがtrueに設定TextWrappingだと:

<data:DataGrid x:Name="LayoutRoot" AutoGenerateColumns="False" IsReadOnly="True" RowDetailsVisibilityMode="Visible" > 
     <data:DataGrid.Columns> 

      <data:DataGridTextColumn Header="Date" Binding="{Binding Date}" /> 
      <data:DataGridTextColumn Header="User" Binding="{Binding User}" /> 

      <data:DataGridTemplateColumn Header="Note" Width="100"> 
       <data:DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
          <TextBlock TextWrapping="Wrap" Text="{Binding Note}" /> 
        </DataTemplate> 
       </data:DataGridTemplateColumn.CellTemplate> 
      </data:DataGridTemplateColumn> 

     </data:DataGrid.Columns> 
    </data:DataGrid> 
+1

DataGridにRowHeightが設定されていないと、スクロールの問題が発生します。 –

+1

DataGridの高さをautoに設定し、ScrollViewerでデータグリッドをラップすると、スクロールの問題は発生しません。 – Jesse

+0

私はあなたのソリューションを試しましたが、例外が発生しました。私は銀色で働いています4 –

20

私はラップテキストを設定するElementStyleを使用し、それがすべての権利動作します。ハッピーコーディング!

<Style x:Key="DataGridTextColumnStyle" TargetType="TextBlock"> 
    <Setter Property="TextWrapping" Value="Wrap"/> 
</Style> 

<data:DataGridTextColumn Binding="{Binding DESC}" 
     Header="Short Description" 
     HeaderStyle="{StaticResource DataGridHeaderStyle}" 
     ElementStyle="{StaticResource DataGridTextColumnStyle}" > 
</data:DataGridTextColumn> 
+1

テンプレートの作成を避ける良いソリューションです。 –

+1

DataGridにRowHeightが設定されていないと、スクロールの問題が発生します。 –

2

いずれのソリューションも機能しますが、どちらもスクロールの問題を引き起こします。

RowHeightが設定されていないDataGridを使用している場合、行の高さはこれらのTextBlockのサイズによって決まります。 DataGridは仮想化を使用し、TextBlocksが表示されるまで描画しません。したがって、スクロールバーの大きさはわかりません。中マウスボタンでスクロールすると、あらゆる種類の不幸な動作が発生します。

xmlns:dataprimitives="clr-namespace:System.Windows.Controls.Primitives;assembly=System.Windows.Controls.Data" 
    xmlns:SystemWindowsControls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" 
    xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows"> 

    <UserControl.Resources> 

     <Style x:Key="DataGridStyleNoVirtualization" TargetType="SystemWindowsControls:DataGrid"> 
      <Setter Property="RowBackground" Value="#AAEAEFF4" /> 
      <Setter Property="AlternatingRowBackground" Value="#00FFFFFF" /> 
      <Setter Property="Background" Value="#FFFFFFFF" /> 
      <Setter Property="HeadersVisibility" Value="Column" /> 
      <Setter Property="HorizontalScrollBarVisibility" Value="Auto" /> 
      <Setter Property="VerticalScrollBarVisibility" Value="Auto" /> 
      <Setter Property="SelectionMode" Value="Extended" /> 
      <Setter Property="CanUserReorderColumns" Value="True" /> 
      <Setter Property="CanUserResizeColumns" Value="True" /> 
      <Setter Property="CanUserSortColumns" Value="True" /> 
      <Setter Property="AutoGenerateColumns" Value="True" /> 
      <Setter Property="RowDetailsVisibilityMode" Value="VisibleWhenSelected" /> 
      <Setter Property="BorderBrush"> 
       <Setter.Value> 
        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
         <GradientStop Color="#FFA3AEB9" Offset="0"/> 
         <GradientStop Color="#FF8399A9" Offset="0.375"/> 
         <GradientStop Color="#FF718597" Offset="0.375"/> 
         <GradientStop Color="#FF617584" Offset="1"/> 
        </LinearGradientBrush> 
       </Setter.Value> 
      </Setter> 
      <Setter Property="BorderThickness" Value="1" /> 
      <Setter Property="DragIndicatorStyle"> 
       <Setter.Value> 
        <!-- TODO: Change the TargetType to Control when the fix Jolt bugs 18719 is verified --> 
        <Style TargetType="ContentControl"> 
         <Setter Property="Foreground" Value="#7FFFFFFF" /> 
         <Setter Property="Template"> 
          <Setter.Value> 
           <!-- TODO: Change the TargetType to Control when the fix Jolt bugs 18719 is verified --> 
           <ControlTemplate TargetType="ContentControl"> 
            <Grid> 
             <vsm:VisualStateManager.VisualStateGroups> 
              <vsm:VisualStateGroup x:Name="SortStates"> 
               <vsm:VisualState x:Name="Unsorted" /> 
               <vsm:VisualState x:Name="SortAscending"> 
                <Storyboard> 
                 <DoubleAnimation Storyboard.TargetName="SortIcon" Storyboard.TargetProperty="Opacity" Duration="0" To="1.0"/> 
                </Storyboard> 
               </vsm:VisualState> 
               <vsm:VisualState x:Name="SortDescending"> 
                <Storyboard> 
                 <DoubleAnimation Storyboard.TargetName="SortIcon" Storyboard.TargetProperty="Opacity" Duration="0" To="1.0"/> 
                 <DoubleAnimation Storyboard.TargetName="SortIcon" Storyboard.TargetProperty="(RenderTransform).ScaleY" Duration="0" To="-.9"/> 
                </Storyboard> 
               </vsm:VisualState> 
              </vsm:VisualStateGroup> 
             </vsm:VisualStateManager.VisualStateGroups> 

             <Rectangle x:Name="BackgroundRectangle" Stretch="Fill" Fill="#66808080" Grid.ColumnSpan="2" /> 

             <Rectangle x:Name="BackgroundGradient" Stretch="Fill" Grid.ColumnSpan="2" Opacity="0" > 
              <Rectangle.Fill> 
               <LinearGradientBrush StartPoint=".7,0" EndPoint=".7,1"> 
                <GradientStop Color="#FFFFFFFF" Offset="0.015" /> 
                <GradientStop Color="#F9FFFFFF" Offset="0.375" /> 
                <GradientStop Color="#E5FFFFFF" Offset="0.6" /> 
                <GradientStop Color="#C6FFFFFF" Offset="1" /> 
               </LinearGradientBrush> 
              </Rectangle.Fill> 
             </Rectangle> 

             <Grid HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Margin="{TemplateBinding Padding}"> 
              <Grid.ColumnDefinitions> 
               <ColumnDefinition/> 
               <ColumnDefinition Width="Auto" /> 
              </Grid.ColumnDefinitions> 

              <ContentPresenter Content="{TemplateBinding Content}"/> 

              <Path Grid.Column="1" Name="SortIcon" Fill="#7FFFFFFF" RenderTransformOrigin=".5,.5" HorizontalAlignment="Left" VerticalAlignment="Center" Opacity="0" Stretch="Uniform" Width="8" Margin="4,0,0,0" Data="F1 M -5.215,6.099L 5.215,6.099L 0,0L -5.215,6.099 Z "> 
               <Path.RenderTransform> 
                <ScaleTransform ScaleX=".9" ScaleY=".9" /> 
               </Path.RenderTransform> 
              </Path> 
             </Grid> 
            </Grid> 
           </ControlTemplate> 
          </Setter.Value> 
         </Setter> 
        </Style> 
       </Setter.Value> 
      </Setter> 
      <Setter Property="DropLocationIndicatorStyle"> 
       <Setter.Value> 
        <Style TargetType="ContentControl"> 
         <Setter Property="Background" Value="#FF3F4346"/> 
         <Setter Property="Width" Value="2"/> 
         <Setter Property="Template"> 
          <Setter.Value> 
           <ControlTemplate TargetType="ContentControl"> 
            <Rectangle Fill="{TemplateBinding Background}" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}"/> 
           </ControlTemplate> 
          </Setter.Value> 
         </Setter> 
        </Style> 
       </Setter.Value> 
      </Setter> 
      <Setter Property="GridLinesVisibility" Value="Vertical" /> 
      <Setter Property="HorizontalGridLinesBrush" Value="#FFC9CACA" /> 
      <Setter Property="IsTabStop" Value="True" /> 
      <Setter Property="VerticalGridLinesBrush" Value="#FFC9CACA" /> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="SystemWindowsControls:DataGrid"> 
         <Grid> 
          <vsm:VisualStateManager.VisualStateGroups> 
           <vsm:VisualStateGroup x:Name="CommonStates"> 
            <vsm:VisualState x:Name="Normal"/> 
            <vsm:VisualState x:Name="Disabled"> 
             <Storyboard> 
              <DoubleAnimation Storyboard.TargetName="DisabledVisualElement" Storyboard.TargetProperty="Opacity" Duration="0" To="1"/> 
             </Storyboard> 
            </vsm:VisualState> 
           </vsm:VisualStateGroup> 
          </vsm:VisualStateManager.VisualStateGroups> 
          <Border BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}" CornerRadius="2"> 
           <Grid Name="Root" Background="{TemplateBinding Background}"> 
            <Grid.Resources> 
             <!--Start: TopLeftHeaderTemplate--> 
             <ControlTemplate x:Key="TopLeftHeaderTemplate" TargetType="dataprimitives:DataGridColumnHeader"> 
              <Grid Name="Root"> 
               <Grid.RowDefinitions> 
                <RowDefinition/> 
                <RowDefinition/> 
                <RowDefinition Height="Auto" /> 
               </Grid.RowDefinitions> 
               <Border BorderThickness="0,0,1,0" BorderBrush="#FFC9CACA" Background="#FF1F3B53" Grid.RowSpan="2"> 
                <Rectangle Stretch="Fill" StrokeThickness="1"> 
                 <Rectangle.Fill> 
                  <LinearGradientBrush StartPoint=".7,0" EndPoint=".7,1"> 
                   <GradientStop Color="#FCFFFFFF" Offset="0.015" /> 
                   <GradientStop Color="#F7FFFFFF" Offset="0.375" /> 
                   <GradientStop Color="#E5FFFFFF" Offset="0.6" /> 
                   <GradientStop Color="#D1FFFFFF" Offset="1" /> 
                  </LinearGradientBrush> 
                 </Rectangle.Fill> 
                </Rectangle> 
               </Border> 
               <Rectangle VerticalAlignment="Bottom" Width="Auto" StrokeThickness="1" Height="1" Fill="#FFDBDCDC" Grid.RowSpan="2"/> 
              </Grid> 
             </ControlTemplate> 
             <!--End: TopLeftHeaderTemplate--> 

             <!--Start: TopRightHeaderTemplate--> 
             <ControlTemplate x:Key="TopRightHeaderTemplate" TargetType="dataprimitives:DataGridColumnHeader"> 
              <Grid Name="RootElement"> 
               <Grid.RowDefinitions> 
                <RowDefinition/> 
                <RowDefinition/> 
                <RowDefinition Height="Auto" /> 
               </Grid.RowDefinitions> 
               <Border BorderThickness="1,0,0,0" BorderBrush="#FFC9CACA" Background="#FF1F3B53" Grid.RowSpan="2"> 
                <Rectangle Stretch="Fill"> 
                 <Rectangle.Fill> 
                  <LinearGradientBrush StartPoint=".7,0" EndPoint=".7,1"> 
                   <GradientStop Color="#FCFFFFFF" Offset="0.015" /> 
                   <GradientStop Color="#F7FFFFFF" Offset="0.375" /> 
                   <GradientStop Color="#E5FFFFFF" Offset="0.6" /> 
                   <GradientStop Color="#D1FFFFFF" Offset="1" /> 
                  </LinearGradientBrush> 
                 </Rectangle.Fill> 
                </Rectangle> 
               </Border> 
              </Grid> 
             </ControlTemplate> 
             <!--End: TopRightHeaderTemplate--> 
            </Grid.Resources> 

            <Grid.RowDefinitions> 
             <RowDefinition Height="Auto" /> 
             <RowDefinition/> 
             <RowDefinition Height="Auto" /> 
             <RowDefinition Height="Auto" /> 
            </Grid.RowDefinitions> 
            <Grid.ColumnDefinitions> 
             <ColumnDefinition Width="Auto" /> 
             <ColumnDefinition/> 
             <ColumnDefinition Width="Auto" /> 
            </Grid.ColumnDefinitions> 

            <dataprimitives:DataGridColumnHeader Name="TopLeftCornerHeader" Template="{StaticResource TopLeftHeaderTemplate}" Width="22" /> 
            <dataprimitives:DataGridColumnHeadersPresenter Name="ColumnHeadersPresenter" Grid.Column="1"/> 
            <dataprimitives:DataGridColumnHeader Name="TopRightCornerHeader" Grid.Column="2" Template="{StaticResource TopRightHeaderTemplate}" /> 
            <Rectangle Name="ColumnHeadersAndRowsSeparator" Grid.ColumnSpan="3" VerticalAlignment="Bottom" Width="Auto" StrokeThickness="1" Height="1" Fill="#FFC9CACA"/> 

            <ScrollViewer Grid.ColumnSpan="2" Grid.Row="1"> 
             <dataprimitives:DataGridRowsPresenter Name="RowsPresenter" /> 
            </ScrollViewer> 

            <Rectangle Name="BottomRightCorner" Fill="#FFE9EEF4" Grid.Column="2" Grid.Row="2" /> 
            <Rectangle Name="BottomLeftCorner" Fill="#FFE9EEF4" Grid.Row="2" Grid.ColumnSpan="2" /> 

            <Grid Grid.Column="1" Grid.Row="2"> 
             <Grid.ColumnDefinitions> 
              <ColumnDefinition Width="Auto" /> 
              <ColumnDefinition/> 
             </Grid.ColumnDefinitions> 
             <Rectangle Name="FrozenColumnScrollBarSpacer" /> 
            </Grid> 

           </Grid> 
          </Border> 
          <Border x:Name="DisabledVisualElement" IsHitTestVisible="False" Height="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="Auto" CornerRadius="2" Background="#8CFFFFFF" Opacity="0"/> 
         </Grid> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
</UserControl.Resources> 
0

はあなただけ強くのTextBlockのHeightプロパティを設定することができ、スクロール問題を解決するには、たとえば、:私はこれにDataGridのスタイルを設定することで、仮想化を無効にしていますので、

私はデータグリッドのページングを使用しています:

<Style x:Key="DataGridTextColumnStyle" TargetType="TextBlock"> 
    <Setter Property="TextWrapping" Value="Wrap"/> 
    <Setter Property="Height" Value="15"/> 
</Style> 
関連する問題