2017-12-28 21 views
1

私はデータグリッドを持っています。これは他のデータと共にいくつかのイメージファイルのサムネイルを表示します。私は、画像の一部をトリミングして、その切り抜かれた画像をDatagridに表示するコンバータを使用しています。 enter image description here 画像はきれいですが、非常に小さいです。マウスを使用して列の幅を変更すると、画像の幅に変化があります。しかし、画像がcell.Belowでいっぱいのスペースを取っていないことは、私が使用していたコードです:ImageはDataGridCellのスペースをすべて取っていません

<DataGrid Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="1" RowHeight="30" x:Name="dgFileDetails" CanUserAddRows="False" AutoGenerateColumns="False" SelectionMode="Single" CellEditEnding="dgFileDetails_CellEditEnding" SelectionChanged="dgFileDetails_SelectionChanged" MouseDoubleClick="dgFileDetails_MouseDoubleClick" AlternatingRowBackground="{StaticResource LightGrayColorBrush}" GridLinesVisibility="None" CurrentCellChanged="dgFileDetails_CurrentCellChanged" > 
    <DataGrid.Resources> 
     <Style TargetType="{x:Type DataGridCell}" x:Key="TextCellStyle"> 
      <Setter Property="VerticalAlignment" Value="Center" /> 
     </Style> 
     <Style TargetType="{x:Type DataGridCell}" x:Key="ImageCellStyle"> 
      <Setter Property="VerticalAlignment" Value="Stretch"></Setter> 
      <Setter Property="HorizontalAlignment" Value="Stretch"></Setter> 
      <Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter> 
      <Setter Property="VerticalContentAlignment" Value="Stretch"></Setter> 
     </Style> 
    </DataGrid.Resources> 
    <DataGrid.Columns> 
     <DataGridTextColumn IsReadOnly="False" Width="2*" Header="Sheet Name" Binding="{Binding NewFileName}" /> 
     <DataGridTextColumn IsReadOnly="False" Width="1*" Header="Label" Binding="{Binding FileId}" /> 
     <DataGridTextColumn IsReadOnly="False" Width="1*" Header="Trade" Binding="{Binding Trade}" /> 
     <DataGridTextColumn IsReadOnly="False" Width="1*" Header="Sub-Trade" Binding="{Binding SubTrade}" /> 
     <DataGridTextColumn IsReadOnly="False" Width="1*" Header="Version" Binding="{Binding VersionName}" /> 
     <DataGridTextColumn IsReadOnly="False" Width="0.5*" Header="Revision" Binding="{Binding RevisionNo}" /> 
     <DataGridTemplateColumn Header="Sheet Title" Width="1*" IsReadOnly="True" CellStyle="{StaticResource ImageCellStyle}"> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <Image Source="{Binding TitleImage,Converter={StaticResource ConverterTupleToImage}}" Stretch="Fill" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" /> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
     <DataGridTemplateColumn Header="Sheet Label" Width="1*" IsReadOnly="True" CellStyle="{StaticResource ImageCellStyle}"> 
      <DataGridTemplateColumn.CellTemplate > 
       <DataTemplate> 
        <Image Source="{Binding IdImage,Converter={StaticResource ConverterTupleToImage}}" Stretch="Fill" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" /> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
    </DataGrid.Columns> 
</DataGrid> 

私がストレッチするセルのすべての配向特性が設定されていることを見ることができますが、そうでありませんhelp。だから、Image要素をDataGridCellの空間全体をどのようにして使うのですか?

編集:

public object Convert(object value,Type targetType,object parameter,CultureInfo cultureInfo) 
{ 
    try 
    { 
     if (value is Tuple<Tuple<int, int, int, int>, string>) 
     { 
      Tuple<Tuple<int, int, int, int>, string> tuple = value as Tuple<Tuple<int, int, int, int>, string>; 
      Tuple<int, int, int, int> rectDims = tuple.Item1; 
      string filePath = tuple.Item2; 
      using (MyDocument doc = MyDocument.Load(filePath)) 
      { 
       var size = doc.Size; 
       int width = (int)(size.Width); 
       int height = (int)(size.Height); 
       Rectangle cropSection = new Rectangle(rectDims.Item1, rectDims.Item3, Math.Abs(rectDims.Item1 - rectDims.Item2), Math.Abs(rectDims.Item3 - rectDims.Item4)); 
       using (Image image = doc.Render(0, width, height, 300, 300, false)) 
       { 
        Bitmap targetRect = new Bitmap(cropSection.Width, cropSection.Height); 
        using (Graphics g = Graphics.FromImage(targetRect)) 
        { 
         g.DrawImage(image, 0, 0, cropSection, GraphicsUnit.Pixel); 
        } 
        return BitmapConverter.ToImageSource(targetRect); 
       } 
      } 
     } 
     else 
     { 
      return null; 
     } 
    } 
    catch (Exception ex) 
    { 
     return null; 
    } 
} 
+0

コンバータはどのように見えますか? – Clemens

+0

@Clemensコンバータのコードを追加しました。 –

+0

[CroppedBitmap](https://msdn.microsoft.com/en-us/library/system.windows.media.imaging.croppedbitmap(v = vs.110).aspx)を使用していない理由は何ですか? – Clemens

答えて

0

問題が(コメントでクレメンスによって示唆)CroppedBitmapクラスを使用することによって解決された:ここではコンバータのコードです。理由はわかりませんが、私が使用したコードは次のとおりです。

public object Convert(object value,Type targetType,object parameter,CultureInfo cultureInfo) 
{ 
    try 
    { 
     if (value is Tuple<Tuple<int, int, int, int>, string>) 
     { 
      Tuple<Tuple<int, int, int, int>, string> tuple = value as Tuple<Tuple<int, int, int, int>, string>; 
      Tuple<int, int, int, int> rectDims = tuple.Item1; 
      string filePath = tuple.Item2; 
      using (MyDocument doc = MyDocument.Load(filePath)) 
      { 
       var size = doc.Size; 
       int width = (int)(size.Width); 
       int height = (int)(size.Height); 
       Rectangle cropSection = new Rectangle(rectDims.Item1, rectDims.Item3, Math.Abs(rectDims.Item1 - rectDims.Item2), Math.Abs(rectDims.Item3 - rectDims.Item4)); 
       using (Image image = doc.Render(0, width, height, 300, 300, false)) 
       { 
        BitmapSource sourceImage = BitmapHelper.ToBitmapSource(image); 
        CroppedBitmap croppedImage = new CroppedBitmap(sourceImage,new System.Windows.Int32Rect(cropSection.X,cropSection.Y,cropSection.Width,cropSection.Height)); 
        return croppedImage; 
       } 
      } 
     } 
     else 
     { 
      return null; 
     } 
    } 
    catch (Exception ex) 
    { 
     return null; 
    } 
} 
関連する問題