1
私はデータグリッドを持っています。これは他のデータと共にいくつかのイメージファイルのサムネイルを表示します。私は、画像の一部をトリミングして、その切り抜かれた画像をDatagridに表示するコンバータを使用しています。 画像はきれいですが、非常に小さいです。マウスを使用して列の幅を変更すると、画像の幅に変化があります。しかし、画像が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;
}
}
コンバータはどのように見えますか? – Clemens
@Clemensコンバータのコードを追加しました。 –
[CroppedBitmap](https://msdn.microsoft.com/en-us/library/system.windows.media.imaging.croppedbitmap(v = vs.110).aspx)を使用していない理由は何ですか? – Clemens