Frage

Ich mag einige benutzerdefinierten MenuHeaders in WPF machen, so kann ich (zum Beispiel), ein Symbol und Text in einem Menüpunkt.

Normalerweise MenuItems verwenden, wenn Sie die Header-Feld mit geraden Text zu füllen, können Sie einen Beschleuniger unter Verwendung eines Unterstrichs hinzufügen. zB _file

Allerdings, wenn ich in einem Usercontrol setzen wollte, glaube ich, diese Funktion brechen würde, wie würde ich etwas tun, ähnlich den folgend?

<Menu>
<MenuItem>
    <MenuItem.Header>
    <UserControl>
        <Image Source="..." />
        <Label Text="_Open" />
    </UserControl>
    </MenuItem.Header>
</MenuItem>
...
War es hilfreich?

Lösung

Ich denke, die Icon-Eigenschaft Ihren Bedürfnissen entspricht.
Doch die ursprüngliche Frage zu beantworten, ist es möglich, die Accelerator-Funktionalität zu behalten, wenn Sie den Inhalt Ihrer menuitem komponieren. Wenn Sie Inhalte in einem MenuItem verschachtelt haben, müssen Sie die Access Eigenschaft definieren explizit wie in der ersten unten. Wenn Sie das Inline-Formular verwenden, wird dies automatisch erledigt.

 <Menu> 
   <MenuItem>
      <MenuItem.Header>
        <StackPanel Orientation="Horizontal">
          <Image Source="Images/Open.ico" />      
          <AccessText>_Open..</AccessText>
        </StackPanel>
      </MenuItem.Header>
    </MenuItem>
    <MenuItem Header="_Close" />
   </Menu>

Andere Tipps

Das Problem ist, dass Sie das Bild innerhalb des Inhalts des MenuHeader gesetzt, was bedeutet, dass Sie den Beschleuniger Schlüssel verlieren. Wenn Sie nur versuchen, ein Bild in der Menükopf zu haben, gehen Sie wie folgt.

<MenuItem Header="_Open">
  <MenuItem.Icon>
    <Image Source="images/Open.png"/>
  </MenuItem.Icon>
</MenuItem>

Wenn Sie das Aussehen anpassen möchten und fühlen sich noch weiter, ändern Sie die Control und Stil für das Menü. Aus Erfahrung Styling sind die Menüs und menuitems viel schwieriger, dann Styling der anderen WPF-Steuerelemente.

Erster Gedanke, würden Sie denken, dass die Icon-Eigenschaft nur ein Bild enthalten. Aber es kann eigentlich alles enthalten! Ich entdecken diese durch Zufall, als ich programmatisch die Image-Eigenschaft direkt in einen String mit dem Pfad zu einem Bild zu setzen versucht. Das Ergebnis war, dass es nicht das Bild zeigte, aber den eigentlichen Text des Weges! Dann entdeckte ich, dass ich zuerst ein Bildelement zu schaffen, und dass auf die Icon-Eigenschaft festgelegt. Dies führt mich zu denken, dass die Image-Eigenschaft war nur irgendein Inhalt Container, der auf der linken Seite im Menü im Symbolbereich befindet, und ich hatte recht. Ich habe versucht, einen Knopf dort zu setzen, und es hat funktioniert!

Dies ist eine Schaltfläche mit dem Text „i“ im Symbolbereich des Menüpunktes zeigt. Wenn Sie auf die Schaltfläche klicken, wird der Button_Click Ereignis ausgelöst (die LanguageMenu_Click nicht ausgelöst wird, wenn Sie auf die Schaltfläche klicken).

<MenuItem Name="LanguageMenu" Header="_Language" Click="LanguageMenu_Click">
  <MenuItem.Icon>
    <Button Click="Button_Click">i</Button>
  </MenuItem.Icon>
</MenuItem>

Dies führt zu einer Alternative zu nicht ein Bild für das Symbol machen zu müssen, aber Text mit einer Symbolschriftart verwenden, anstatt ein einfaches „Symbol“ angezeigt werden soll. Das folgende Beispiel verwendet den Schriftart Wingdings, die ein Floppydisk-Symbol enthält. Dieses Symbol in der Schrift ist mit dem charachter < abgebildet, die in XAML besondere Bedeutung hat, so müssen wir stattdessen die codierte Version &lt; verwenden. Dies funktioniert wie ein Traum! Im Folgenden wird ein Floppydisk Symbol als Symbol auf dem Menüpunkt:

<MenuItem Name="mnuFileSave" Header="Save" Command="ApplicationCommands.Save">
  <MenuItem.Icon>
    <Label VerticalAlignment="Center" HorizontalAlignment="Center" 
           FontFamily="Wingdings">&lt;</Label>
  </MenuItem.Icon>                
</MenuItem>

@ a7an: Ah, ich habe nicht die Icon-Eigenschaft bemerken vor. Das ist ein guter Anfang.

Doch speziell wollte ich eine zusätzliche ‚Taste‘ zu einigen MenuItems hinzufügen, damit ich eine ‚Pin‘ -Funktion haben könnte (siehe die zuletzt geladene Liste Dokumente in Office 2007 für das Feature Idee).

Da muss es Code sein, wie gut, werde ich wahrscheinlich die Kontrolle Unterklasse muß und den Code für die Schaltfläche hinzu? (Affraid Nicht mit der MenuItem Vorlage von Unordnung, bereits hatte es einmal zu tun und ich würde es wieder tun, wenn ich musste;))

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top