2009-05-26 12 views

答えて

1

ビットマップイメージ(BMP、JPEG、PNGなど - ベクトルイメージ描画ではないもの)を読み込んでいると仮定すると、System.Windows.Media.ImagingのBitmapSourceクラスを使用してソースを読み取ることができます画像のPixelHeightとPixelWidth画像を直接BitmapSourceに読み込むことはできますが、Imageコントロールに読み込んでいる場合は、ImageのSourceプロパティから直接BitmapSourceにアクセスできます。次に、PixelHeightまたはPixelWidthがそれより小さい場合、低解像度が50px未満、100px、200px未満などの警告を表示することを意味します。

画像の上にオレンジ色の長方形が表示されるようにするには、幅が100px未満または100px未満の場合は表示します。非リストボックスの実装を使用して、我々は行うことができます:

<Image x:Name="DemoImage" Source="demo.png"/> 
<Rectangle Fill="Orange" Width="20" Height="20"> 
    <Rectangle.Resources> 
     <local:LessThanConverter x:Key="LessThanConverter"/> 
    </Rectangle.Resources> 
    <Rectangle.Style> 
     <Style TargetType="Rectangle"> 
      <Setter Property="Visibility" Value="Collapsed"/> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding ElementName=DemoImage, Path=Source.PixelHeight, 
        Converter={StaticResource LessThanConverter}, ConverterParameter=100}" Value="True"> 
        <Setter Property="Visibility" Value="Visible"/> 
       </DataTrigger> 
       <DataTrigger Binding="{Binding ElementName=DemoImage, Path=Source.PixelWidth, 
        Converter={StaticResource LessThanConverter}, ConverterParameter=100}" Value="True"> 
        <Setter Property="Visibility" Value="Visible"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Rectangle.Style> 
</Rectangle> 

WPFのみ平等をチェックするトリガので、我々は2つの値を比較するために、コンバータを必要とする - この場合には、当社の実際のピクセルの高さ/幅とピクセル高さ/幅をイメージを「低解像度」にして、トリガーできる真偽値を返します。上のコードでは、LessThanConverterという名前です。コンバータのコードは単純です:次に

/// <summary> 
/// Converter to use in WPF triggers that returns true when 
/// 'value' is less than 'parameter'. 
/// </summary> 
public class LessThanConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, 
     object parameter, System.Globalization.CultureInfo culture) 
    { 
     return ((int)value < System.Convert.ToInt32(parameter)); 
    } 

    public object ConvertBack(object value, Type targetType, 
     object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

、イメージがロードされたときに、長方形のスタイルは、画像が100pxに満たない高さや幅を持っているかどうかを確認するために、そのトリガをチェックします。そうであれば、矩形の可視性がデフォルト(Collapsed)からVisibleに変更され、イメージの上にオレンジ色の四角形が表示されます。もちろん、画像の解像度が低いときは、別の要素を使って簡単に表示できます。

リストボックスでこれを行うには、ソースイメージと警告アイコンの両方を含むようにアイテムテンプレートを更新するだけで済みます。次に、関連付けられているイメージに基づいて警告アイコンにスタイルを適用します。 ElementNameバインディングはここでは使用できませんが、他のバインディングタイプのいずれかで十分です。

または、ElementNameバインディングを使用する以下のコードをイメージと警告アイコンの両方を含むカスタムコントロールにラップし、カスタムコントロールに表示される点を除いてアイテムテンプレートの通常のImageコントロールと同様に使用できます。警告アイコン(低解像度の画像が表示されている場合)。

+0

返信ありがとうございます – ibrahimkhan