2010-11-29 4 views
3

Ich habe ein MenuItem wie untenWarum kann ich das gleiche Symbol nicht für mehr als 1 Element im Menü verwenden?

<MenuItem Header="Edit"> 
    <MenuItem Header="Copy Direct Link" Icon="{StaticResource CopyIcon}" Command="{Binding CopyImageCommand}" /> 
    <MenuItem Header="Copy Image Data" Icon="{StaticResource CopyIcon}" Command="{Binding CopyImageDataCommand}" /> 
    <MenuItem Header="Paste" Icon="{StaticResource PasteIcon}" Command="{Binding PasteImageCommand}" /> 
</MenuItem> 

Beachten Sie die ersten 2 Artikel das gleiche Symbol verwenden, bekomme ich so etwas wie unten

Ich versuchte, den zweiten Punkt zu entfernen,

<MenuItem Header="Edit"> 
    <MenuItem Header="Copy Direct Link" InputGestureText="Ctrl+C" Icon="{StaticResource CopyIcon}" Command="{Binding CopyImageCommand}" /> 
    <!--<MenuItem Header="Copy Image Data" InputGestureText="Ctrl+Alt+C" Icon="{StaticResource CopyIcon}" Command="{Binding CopyImageDataCommand}" />--> 
    <MenuItem Header="Paste" InputGestureText="Ctrl+P" Icon="{StaticResource PasteIcon}" Command="{Binding PasteImageCommand}" /> 
</MenuItem> 

dann habe ich etwas wie

Wie kann ich Symbole wiederverwenden?

+0

Dies scheint ein inhärentes Problem. Das Gleiche passiert mit Vanille WinForms. Die Lösung besteht darin, das Bild/Menüelement zu klonen. – leppie

Antwort

7

Siehe this Frage

Ein Bild nur einen Elternteil haben kann, so wird es von der ersten MenuItem auf den zweiten verschoben werden. Sie können die x hinzufügen: Gemeinsames Attribut wie diese

<Window.Resources> 
    <Image x:Key="CopyIcon" x:Shared="False" Source="..." /> 
</Window.Resources> 

Von msdn

x: Gemeinsames Attribut
Wenn auf false gesetzt, WPF Ressource-Retrieval Verhalten modifiziert, so dass Anfragen nach die attributierte Ressource erstellen Sie eine neue Instanz für jede Anfrage anstelle der gemeinsamen Instanz für alle Anfragen.

1

Versuchen Sie Folgendes:

<MenuItem Header=“Paste“ > 
<MenuItem.Icon><Image Height=“16“ Width=“16“ Source=“paste.jpg“ /></MenuItem.Icon> 
</MenuItem> 
4

Sie sind höchstwahrscheinlich CopyIcon als Bildtyp in Ihrer Ressource zu erklären, etwa wie folgt:

<Window.Resources> 
    <Image x:Key="CopyIcon" Source="yourcopyicon.ico"/> 
</Window.Resources> 

also die Ursache für Das Problem ist, Image ist ein visuelles Element, da es von FrameworkElement (whi ch ist ein visuelles Element) und ein visuelles Element kann nicht mehr als ein Elternteil gleichzeitig haben. Aus diesem Grund zeigt das erste MenuItem das Symbol nicht an, da das zweite MenuItem das übergeordnete Element von CopyIcon zurücksetzt, wodurch es sich selbst zum übergeordneten Element von CopyIcon macht.

Ich hoffe, diese Erklärung ist hilfreich für Sie. Jetzt folge, was Meleak in seiner Antwort gesagt hat. :-)

+1

+1 für eine klare Erklärung des Problems –

Verwandte Themen