Hallo zusammen.
Da ich jetzt doch mal mit der WPF anfangen will, beginnt mein diesbezügliches Wissensniveau bei nahezu Null. Möge es sich kontinuierlich steigern.
Ich werde eines meiner kleineren WinForms-Programme in der WPF neu schreiben, kämpfe aber schon mit den Anfängen.
Ich habe ein Menü, in dem ich nur Vektorgrafik-Items anzeigen will, keinen Text. Dazu erstelle ich mir (mangels besseren Wissens) Grafiken in Inkscape, exportiere es in eine XAML-Datei und kopiere mir die Pfadangaben raus. Das klappt, auch wenn ich nicht glaube, dass das der effizienteste Weg ist. Nachdem ich nach Rumprobieren mit Canvas und ViewBox ein (vermeintlich?) akzeptables Ergebnis erzielt habe, will ich den XAML-Code auslagern, indem ich Styles verwende.
GeometryPath-Details
Anscheinend geht die durch den Style festgelegte ViewBox verloren, da der Header im konkreten MenuItem überschrieben wird. Wo ist mein Denkfehler oder wie macht man es richtig? Denn: Die ViewBox will ich (weil ich es nicht besser weiß) dazu nutzen, um die jeweilige Vektorgrafik passgenau in das MenuItem einzufügen. Doch wenn ich Höhe und Breite der ViewBox im Style ändere, geschieht nix. Verwende ich keine Styles/Ressourcen, klappt es.
Da ich jetzt doch mal mit der WPF anfangen will, beginnt mein diesbezügliches Wissensniveau bei nahezu Null. Möge es sich kontinuierlich steigern.
Ich werde eines meiner kleineren WinForms-Programme in der WPF neu schreiben, kämpfe aber schon mit den Anfängen.
Ich habe ein Menü, in dem ich nur Vektorgrafik-Items anzeigen will, keinen Text. Dazu erstelle ich mir (mangels besseren Wissens) Grafiken in Inkscape, exportiere es in eine XAML-Datei und kopiere mir die Pfadangaben raus. Das klappt, auch wenn ich nicht glaube, dass das der effizienteste Weg ist. Nachdem ich nach Rumprobieren mit Canvas und ViewBox ein (vermeintlich?) akzeptables Ergebnis erzielt habe, will ich den XAML-Code auslagern, indem ich Styles verwende.
XML-Quellcode
- <Window x:Class="MainWindow"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
- xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
- xmlns:local="clr-namespace:WpfApp1"
- mc:Ignorable="d" d:DataContext="{d:DesignInstance IsDesignTimeCreatable=True,Type={x:Type local:MainWindow}}"
- Title="WPF-App1" Width="400" Height="400">
- <Window.Resources>
- <Style TargetType="{x:Type MenuItem}">
- <Setter Property="Width" Value="32"/>
- <Setter Property="Height" Value="32"/>
- <Setter Property="Margin" Value="1"/>
- <Setter Property="Padding" Value="0"/>
- <Setter Property="Background" Value="White"/>
- <Setter Property="Header">
- <Setter.Value>
- <Viewbox MaxHeight="32" MaxWidth="32" Height="28" Width="28" Margin="1"/>
- </Setter.Value>
- </Setter>
- </Style>
- *** - GeometryPfad-Details siehe Spoiler unten
- </Window.Resources>
- <Grid>
- <Menu VerticalAlignment="Top" Background="White">
- <MenuItem Header="{StaticResource GoToCheckPoint}" ToolTip="gehe zu Checkpoint"/>
- <MenuItem Header="{StaticResource GoToConfigurationSite}" ToolTip="gehe zur Konfigurationsseite des Checkpoints"/>
- </Menu>
- </Grid>
- </Window>
XML-Quellcode
- <PathGeometry x:Key="GoToCheckPointPath" Figures="M 0.47215715 7.2 H 19.740345 v -6.74398 l 11.560913 10.59768 -11.560913 10.59767 v -6.74397 H 0.47215715 Z" FillRule="NonZero"/>
- <Path x:Key="GoToCheckPoint" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" StrokeThickness="1" Stroke="blue" StrokeLineJoin="Round" Data="{StaticResource GoToCheckPointPath}"/>
- <Canvas x:Key="GoToConfigurationSite">
- <Path xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" StrokeThickness="0.9443143" Stroke="#FF000000" StrokeLineJoin="Miter" StrokeStartLineCap="Flat" StrokeEndLineCap="Flat">
- <Path.Data>
- <PathGeometry Figures="M 0.47215715 -4.6647324 H 19.740345 V -11.408712 L 31.301258 -0.81103238 19.740345 9.7866376 v -6.74397 H 0.47215715 Z" FillRule="NonZero"/>
- </Path.Data>
- </Path>
- <Path xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Name="path817" Fill="#FFAAD400" StrokeThickness="1" Stroke="#FF000000" StrokeMiterLimit="4">
- <Path.Data>
- <PathGeometry Figures="m 13.748884 283.3456 -2.925465 0.0201 -2.8449804 0.68179 -2.0828513 -2.05438 -2.493802 -1.52961 -0.020132 -2.92546 -0.6817883 -2.84498 2.0543808 -2.08285 1.5296078 -2.49381 2.9254649 -0.0201 2.8449802 -0.68179 2.082851 2.05439 2.493802 1.5296 0.02013 2.92547 0.681788 2.84498 -2.05438 2.08285 z" FillRule="NonZero"/>
- </Path.Data>
- <Path.RenderTransform>
- <MatrixTransform Matrix="1.0645012 -0.28519576 0.28523225 1.0643652 -78.595099 -292.16811"/>
- </Path.RenderTransform>
- </Path>
- <Ellipse xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Canvas.Left="8.4" Canvas.Top="-3" Width="5" Height="5" Name="path821" Fill="#FFFFFFFF" StrokeThickness="0.9986378" Stroke="#FF000000" StrokeMiterLimit="4"/>
- </Canvas>
Anscheinend geht die durch den Style festgelegte ViewBox verloren, da der Header im konkreten MenuItem überschrieben wird. Wo ist mein Denkfehler oder wie macht man es richtig? Denn: Die ViewBox will ich (weil ich es nicht besser weiß) dazu nutzen, um die jeweilige Vektorgrafik passgenau in das MenuItem einzufügen. Doch wenn ich Höhe und Breite der ViewBox im Style ändere, geschieht nix. Verwende ich keine Styles/Ressourcen, klappt es.
Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.
Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.