Frage

Hier ist meine Schaltfläche Vorlage,

<Microsoft_Windows_Themes:ButtonChrome 
   x:Name="Chrome" 
   Background="{TemplateBinding Background}" 
   BorderBrush="{TemplateBinding BorderBrush}" 
   RenderDefaulted="{TemplateBinding IsDefaulted}" 
   RenderMouseOver="{TemplateBinding IsMouseOver}" 
   RenderPressed="{TemplateBinding IsPressed}">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Image 
               Source="{TemplateBinding ImageSource}" 

               RenderOptions.BitmapScalingMode="NearestNeighbor"

               SnapsToDevicePixels="True"

               HorizontalAlignment="Center"
               VerticalAlignment="Center"
              Stretch="None"
               />
        <ContentPresenter 
            Grid.Column="1"
            HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
            Margin="{TemplateBinding Padding}" 
            VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
            SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" 
            RecognizesAccessKey="True"/>
    </Grid>
</Microsoft_Windows_Themes:ButtonChrome>

Jetzt können Sie sehen, wie pro diese Frage sind verschwommen auf Stackoverflow ich habe versucht, ..

RenderOptions.BitmapScalingMode="NearestNeighbor"

Auf allen Ebenen, Gitter, Chrom .. und versucht, verschiedene Kombinationen von SnapsToDevicePixels aber Bilder zeigen einfach gewohnt richtig. Ich habe Stretch = None, wird das Bild in der Mitte ausgerichtet sind, noch, warum es dehnt automatisch?

Hier ist die Ausgabe und seine sehr frustrierend.

Bad Bild auf WPF http://akashkava.com /blog/wp-content/uploads/2009/12/BadButton.PNG

Die tatsächliche Größe des Bildes ist 16x16, aber ich einige, wie mithilfe von Windows Maginifier herausgefunden, dass, egal was ich tue, wird das Bild tatsächlich versuchen, als 20x20 zu machen, für die größeren Bilder seines selbst das am weitesten rechts stehende und Unterteil Zuschneiden . Ich denke, Bild 16x16 gemacht werden sollte korrekt, wenn Stretch = None, kann jemand klären was Problem hier?

War es hilfreich?

Lösung

Dies ist ein bekanntes Problem, dass WPF Microsoft nicht festgelegt hat. Die einzige Arbeit, um ist die Größe anzupassen, so dass es mit einem Teilpixelabschnitt nicht in der Größe enden.

Andere Tipps

Versuchen Sie, eine explizite Breite und Höhe auf dem Bildelement zu setzen.

die Größe des Bildes und es wäre in Ordnung.

Ich habe einen Button-Stil und hatte die Kontrolle Vorlage eine benutzerdefinierte Höhe außer Kraft gesetzt zu geben.

können Sie wollen nun in WPF4 verfügbar versuchen, eine neue Eigenschaft zu betrachten. Lassen Sie die RenderOptions.BitmapScalingMode zu Highquality oder sie einfach nicht erklären.

Auf dem Wurzelelement (das heißt Ihr Hauptfenster) fügen Sie diese Eigenschaft:. UseLayoutRounding="True"

Eine Eigenschaft bisher nur in Silverlight hat nun alle Bitmap-Sizing woes fixiert. :)

  

Bitte beachten Sie - ein paar der Effekte Layout Rundung   haben auf genaue Layout:

     
      
  • Breite und Höhe oder der Elemente wachsen oder schrumpfen um höchstens 1 Pixel

  •   
  • Platzierung eines Objekts kann durch höchstens 1 Pixel verschieben

  •   
  • zentrierten Elemente können durch höchstens dezentriert vertikal oder horizontal sein,   1 Pixel

  •   

Weitere Informationen finden Sie hier: http: // blogs.msdn.com/text/archive/2009/08/27/layout-rounding.aspx

Wenn Sie denken, Ihr Bild 16x16, aber WPF scheint zu glauben, es 20x20 ist, dann haben Sie wahrscheinlich eine DPI Ausgabe im Bild isself bekommen. Ist Ihr Bild ein PNG? Speichern Sie es als jpg statt und sehen, wie das aussieht.

Ref: http://www.hanselman.com/blog/BeAwareOfDPIWithImagePNGsInWPFImagesScaleWeirdOrAreBlurry.aspx

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top