2009-05-26 5 views

Répondre

1

En supposant que vous chargez des images bitmap (incluant BMP, JPEG, PNG, etc.), vous pouvez utiliser la classe BitmapSource dans System.Windows.Media.Imaging pour lire la source PixelHeight et PixelWidth de l'image. Alors que vous pouvez charger une image directement dans un BitmapSource, si vous chargez dans un contrôle Image, vous pouvez accéder au BitmapSource directement à travers la propriété Source de l'Image. Ensuite, il s'agit juste de déterminer ce que signifie la basse résolution - moins de 50px carré, 100px, 200px, etc. et d'afficher un avertissement lorsque PixelHeight ou PixelWidth est inférieur à cela. En mettant tout cela ensemble, disons que nous voulions afficher un rectangle orange au-dessus d'une image si elle était inférieure à 100 pixels de large ou inférieure à 100 pixels de hauteur. En utilisant une implémentation non listbox, nous pourrions faire:

<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> 

Depuis WPF déclenche vérifier que l'égalité, nous avons besoin d'un convertisseur pour comparer deux valeurs - dans ce cas, notre taille réelle des pixels/largeur et la hauteur pixel/largeur nous avons déterminé que l'image est "basse résolution" - et renvoyons une valeur vraie/fausse sur laquelle nous pouvons nous déclencher. Dans le code ci-dessus, il s'appelle LessThanConverter. Le code du convertisseur est simple:

/// <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(); 
    } 
} 

Puis, quand une image est chargée, Style du rectangle vérifie ses éléments déclencheurs pour voir si l'image a une hauteur ou largeur qui est inférieure à 100px; si tel est le cas, la visibilité du rectangle par défaut (Réduit) devient visible, ce qui affiche le rectangle orange au-dessus de l'image. Bien sûr, vous pouvez facilement utiliser un élément différent pour afficher lorsque l'image a une faible résolution. Pour cela dans une zone de liste, il vous suffira de mettre à jour vos modèles d'éléments pour inclure à la fois votre image source et l'icône d'avertissement; Ensuite, appliquez le style à l'icône d'avertissement en fonction de l'image à laquelle elle est associée. Vous ne pouvez pas utiliser la liaison ElementName ici, mais l'un des autres types de liaison devrait suffire. Ou, enveloppez le code ci-dessous - qui utilise la liaison ElementName - dans un contrôle personnalisé contenant à la fois une icône d'image et d'avertissement et que vous pouvez utiliser comme un contrôle Image normal dans votre modèle d'élément, sauf que votre contrôle personnalisé affiche icône d'avertissement en plus de l'image (lorsqu'une image basse résolution est affichée).

+0

Merci pour la réponse – ibrahimkhan

Questions connexes