Laden...

OpacityMask: Grafik wird im Designer, aber nicht zur Runtime angezeigt

Erstellt von EyeTrackJack vor 3 Jahren Letzter Beitrag vor 2 Jahren 525 Views
E
EyeTrackJack Themenstarter:in
35 Beiträge seit 2019
vor 3 Jahren
OpacityMask: Grafik wird im Designer, aber nicht zur Runtime angezeigt

Hallo,

ich würde gerne eine Grafik auf einem Button darstellen, die ich individuell einfärben können will. Dazu war mein Vorhaben, dass ich einen Button nehme, auf den ich ein gefärbtes Rechteck lege und über die OpacityMask daraus meine Grafik ausstanze. Im Designer funktioniert es. Da wird es wie gewünscht angezeigt. Wenn ich das Programm jedoch starte, wird die Grafik nicht angezeigt.

                        <Button Padding="0" x:Name="btnOptions" Style="{StaticResource GradientButton1}" Click="btnOptions_Click" Height="32" >
                         
                            <Rectangle Fill="#FFFF0202" Width="{Binding ElementName=btnOptions,Path=RenderSize.Width}" 
                                    Height="{Binding ElementName=btnOptions,Path=RenderSize.Height}">
                                    <Rectangle.OpacityMask>
                                        <ImageBrush ImageSource="settings24.png" Stretch="Uniform"/>
                                    </Rectangle.OpacityMask>
                            </Rectangle>
							
                        </Button>

Wenn ich stattdessen die OpacityMask des Buttons nutze, funktioniert es. Die Grafik wird in der Farbe des Button-Hintergrunds angezeigt. Natürlich verschwindet der Rest vom Button. Ist auch ein schöner Effekt, aber nicht der, den ich hier haben möchte.

Wenn ich die Grafik direkt einfüge,

<Image Source="settings24.png" ></Image>

funktioniert es. Aber auch das ist nicht das Ziel.

Hat jemand eine Idee, was da los ist?

Grüße.

Tobias

W
955 Beiträge seit 2010
vor 3 Jahren

Wieso zeichnest du die Grafik nicht einfach mit einem VisualBrush und setzt den Foreground entsprechend?

G
180 Beiträge seit 2015
vor 3 Jahren

Ich habe es jetzt nicht probiert, aber so wie ich dein XAML lese setzt zu lediglich den ImageBrush mit dem Verweis auf das Image.
Wie gesagt, wenn ich nicht komplett irre, müsstest du erst das Image-Tag setzen mit der Source und darin den ImageBrush (könnte sogar durchaus sein, dass dann darin die Source noch einmal refernziert werden muss/kann).

Ich kreuze mal die Finger 😉

5.657 Beiträge seit 2006
vor 3 Jahren

Das scheint mir alles ein bißchen viel Aufwand zu sein, um ein Icon anzuzeigen. WPF unterstützt Vektorgrafiken, die kann man (im Gegensatz zu Bitmaps) beliebig skalieren und einfärben.

Hier gibt es eine (von vielen) großen Icon-Sammlungen: Material Design Icons. Die kannst du frei verwenden, und es gibt für jedes Icon den XAML-Code für WPF-Programme, die du nur in deine Resourcen kopieren mußt.

Weeks of programming can save you hours of planning

E
EyeTrackJack Themenstarter:in
35 Beiträge seit 2019
vor 2 Jahren

Hallo nach langer Zeit. Ich habe es jetzt mit entsprechend eingefärbten Icons gelöst. Von der Seite, wo ich die Icons runterlade (Icons8.com), gibt es eine App, in der man eine Farbe festlegen kann. Dann werden die Icons umgefärbt und lassen sich per drag and drop in VS reinziehen.