WPF InlineUIContainer zeigt Bilder falsch anC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 WPF InlineUIContainer zeigt Bilder falsch an

Post by Anonymous »

Ich bin auf ein Problem mit der Art und Weise gestoßen, wie InlineUIContainer einem Bild Größe zuweist, wenn es in einem TextBlock verwendet wird und ich kann keine Möglichkeit finden, es zu umgehen.
Hier ist eine einfache WPF-Anwendung, die das Problem demonstriert:

Code: Select all
















Code: Select all

public partial class MainWindow : Window
{
private InlineUIContainer container = new InlineUIContainer(new Border()
{
Child = new Image()
{
Source = new BitmapImage(new Uri("pack://application:,,,/Smiley.png"))
},
Background = Brushes.Red
});

public MainWindow()
{
InitializeComponent();
tb.Inlines.Add(container);
}

private void Button_Click(object sender, RoutedEventArgs e)
{
if (tb.Inlines.Count == 0)
{
tb.Inlines.Add(container);
}
else
{
tb.Inlines.Clear();
}
}
}

Code: Select all

Smiley.png
ist ein 100 x 100 Pixel großes Bild. Ich habe den Rahmen mit einem Hintergrund um das Bild herum hinzugefügt, um nur den Platz anzuzeigen, der eingenommen wurde. Das gleiche Verhalten tritt auf, wenn das einzige untergeordnete Element des InlineUIContainer ein Bild ist. Wenn das Bild zum ersten Mal gerendert wird, erscheint es korrekt. Wenn das Bild jedoch durch manuelles Löschen und Hinzufügen der Inlines-Eigenschaft des TextBlocks entfernt und erneut hinzugefügt wird, wird der für das Bild zugewiesene Platz zur vollen Breite, als ob die StretchDirection-Eigenschaft nicht berücksichtigt würde.
Einige Beispiele, die das Problem zeigen:
Erstens die Größe in voller Breite ohne Einstellung von StretchDirection:

Code: Select all











Image

Jetzt mit der StretchDirection-Eigenschaft auf DownOnly gesetzt. Zunächst wird das Bild korrekt angezeigt:
Image

Wenn Sie die Umschalttaste zweimal drücken, um das Bild zu entfernen und dann erneut hinzuzufügen, wird das Bild in der richtigen Größe von 100 x 100 Pixel angezeigt, nimmt jedoch die gesamte Breite des TextBlocks ein:
Image

Das Projekt, in dem ich auf diesen Fehler stoße, ist weitaus ausgefeilter als dieses Beispiel und bringt Einschränkungen hinsichtlich der Lösung des Problems mit sich. Wenn Sie die StretchDirection-Eigenschaft für das Bild selbst festlegen, kann es bei jeder Anzeige korrekt gerendert werden. Das gelingt mir jedoch nicht. Alle Bild-Eigenschaften müssen in einem Stil festgelegt werden. Das Entfernen/Hinzufügen der Inlines zum TextBlock ist funktionell dasselbe wie das Umschalten der Sichtbarkeit, aber in meinem Fall wechsle ich zwischen mehreren Sätzen von Inlines, anstatt nur zu entfernen und hinzuzufügen, sodass jede Lösung, die nicht die direkte Manipulation der Inlines-Eigenschaft beinhaltet, nicht verwendbar ist. Wenn die Eigenschaft Inlines gelöscht und mit einem einzigen Klick auf die Schaltfläche hinzugefügt wird, tritt dieses Problem nicht auf. Aufgrund der Notwendigkeit, zwischen mehreren Sätzen von Inlines zu wechseln, ist dies jedoch auch keine brauchbare Lösung.
Gibt es Hinweise darauf, warum dies geschieht und was getan werden könnte, um das Problem mit den gegebenen Einschränkungen zu beheben?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post