Hallo,
ich arbeite derzeit an einem wpf-Projekt, bei dem ein simpler Texteditor benötgt wird. Meine Idee ist, den Texteditor in ein eigenes Projekt auszulagern, so dass meine Projektmappe nun zwei Projekte beinhaltet:
Im TextEditor-Projekt habe ich einen Ordner mit Namen "Images". Bis jetzt handelt es sich beim Inhalt lediglich um drei Bilddateien. I
Ich habe TextEditor in Main-App referenziert. Bisher habe ich eine MainView im Main-App-Projekt und eine TextEditorView im TextEditor-Projekt. Die TextEditorView schaut so aus:
<UserControl x:Class="TextEditor.Views.TextEditorView"
<!-- die üblichen Namespaces wurden der Übersichtlichkeit wegen hier weggelassen-->
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid Background="AliceBlue">
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<DockPanel Grid.Row="0">
<ToolBar>
<Button x:Name="btnBold" Width="20" Height="20">
<Image Source="TextEditor;component/Images/bold.png"/>
</Button>
<Button x:Name="btnItalic" Width="20" Height="20">
<Image Source="TextEditor;component/Images/italic.png"/>
</Button>
<Button x:Name="btnUnderline" Width="20" Height="20">
<Image Source="TextEditor;component/Images/underline.png"/>
</Button>
</ToolBar>
</DockPanel>
</Grid>
</UserControl>
Dieses UserControl soll in der MainView der Main-App angezeigt werden. Hier der Code:
<Window x:Class="SoloAdventurer.Views.AppMainView"
<!-- die üblichen Namespaces wurden zur Vereinfachung weggelassen, bis auf den folgenden: --
xmlns:textEditorViews ="clr-namespace:TextEditor.Views;assembly=TextEditor"
mc:Ignorable="d"
Title="AppMainView" Height="450" Width="800">
<Grid>
<textEditorViews:TextEditorView/>
</Grid>
</Window>
Das Problem: der Designer zeigt mir bei TextEditorView noch die Images an, in AppMainView jedoch nicht. Wenn ich einen build erstelle kann ich zwar die Buttons sehen, die Images werden aber scheinbar nicht geladen.
Habe ich etwas Wesentliches übersehen?
Ich arbeite zum ersten Mal mit zwei Projekten innerhalb einer Solution.
Vielen Dank,
Gruß
Gene
Versuch es doch mal mit
<Image Source="/TextEditor;component/Images/bold.png"/>
Also mit einem Slash vor dem Bibliotheks-Namen
Hat die Blume einen Knick, war der Schmetterling zu dick.
Dies fällt unter den Begriff Paket-URI (engl. Pack URI): Paket URI in WPF
Die Langform steht unter "Ressourcendatei der Assembly, auf die verwiesen wird":
<Image Source="pack://application:,,,/TextEditor;component/Images/bold.png"/>
(die Kommata stehen für die optionale Version und PublicKey der Assembly)
Und unter "Verwenden von Paket-URIs im Markup" steht, daß man auch relative URIs angeben kann (also so wie BlonderHans geschrieben hat).
Vielen Dank euch beiden - beide Versionen führen (natürlich) zum gewünschten Ergebnis! Auch wenn es peinlich ist: ich glaube, ich habe mich so sehr von der Tatsache täuschen lassen, dass in der TextEditorView im Designer die Images zu sehen waren, dass ich lange nicht auf den Slash gekommen wäre. Vielen Dank nochmal!