none
WPF - Option Button erstellen RRS feed

  • Frage

  • Hallo zusammen,

    ich würde gerne in Visual Studio eine Art Options Menü bauen. Das ganze sollte am liebsten aus einen normalen Button bestehen, auf den ich ein Image legen kann und es soll sich eine Art Drop Down Menü öffnen, wie in Edge oben links zum Beispiel, wenn man ihn anklickt. 

    Ich habe bis jetzt viel mit Styles, Buttons, Menu und MenuItems, Context Menu, etc. rum probiert, aber bin nie zu einer zufriedenstellenden Lösung gekommen! Mal war das Image zu klein und nicht anpassbar, mal öffnete sich das Menü nicht und und und... 

    Ich hoffe jemand von euch hat ein Lösung.

    Jonas

     

    Mittwoch, 6. September 2017 17:34

Antworten

  • Hi Jonas,
    die Beschreibung Deiner Wünsche ist für mich recht nebulös. Ich habe mal eine kleine Demo erstellt, wie man so etwas machen kann, so wie ich Deine Wünsche verstanden habe.

    XAML:

    <Window x:Class="Window12"
            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"
            Title="Window12" Height="300" Width="300">
      <Window.Resources>
        <local:Window12VM x:Key="vm"/>
        <Style TargetType="Button">
          <Setter Property="Margin" Value="5"/>
          <Setter Property="Width" Value="80"/>
          <Setter Property="HorizontalAlignment" Value="Left"/>
        </Style>
      </Window.Resources>
      <Grid DataContext="{StaticResource vm}">
        <Grid.RowDefinitions>
          <RowDefinition Height="Auto"/>
          <RowDefinition/>
        </Grid.RowDefinitions>
        <Button Content="Auf-Zu" Command="{Binding Cmd}"/>
        <TextBlock Grid.Row="1" TextWrapping="Wrap">
          Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
        </TextBlock>
        <StackPanel Grid.Row="1" Background="White" 
                    Visibility="{Binding Sichtbarkeit}"
                    Width="90" HorizontalAlignment="Left" 
                    Height="130" VerticalAlignment="Top">
          <Button Content="Klick 1"/>
          <Button Content="Klick 2"/>
          <Button Content="Klick 3"/>
          <Button Content="Klick 4"/>
        </StackPanel>
      </Grid>
    </Window>

    Und der ViewModel dazu:

    Imports System.ComponentModel
    Imports System.Runtime.CompilerServices
    
    Public Class Window12VM
      Implements INotifyPropertyChanged
    
      Private _sichtbar As Boolean = False
    
      Public ReadOnly Property Cmd As ICommand
        Get
          Return New RelayCommand(AddressOf CmdExec)
        End Get
      End Property
    
      Private Sub CmdExec(obj As Object)
        Me._sichtbar = Not Me._sichtbar
        OnPropertyChanged("Sichtbarkeit")
      End Sub
    
      Public ReadOnly Property Sichtbarkeit As Visibility
        Get
          Return If(Me._sichtbar, Visibility.Visible, Visibility.Hidden)
        End Get
      End Property
    
      ''' <summary>
      ''' INotifyPropertyChanged für die Anzeige von Veränderungen, damit sich die Anzeige aktualisiert
      ''' </summary>
      Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
      Friend Sub OnPropertyChanged(<CallerMemberName> Optional propName As String = "")
        RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propName))
      End Sub
    End Class


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    • Als Antwort vorgeschlagen Peter Fleischer Mittwoch, 6. September 2017 19:33
    • Als Antwort markiert Jonas.Sin Donnerstag, 7. September 2017 06:32
    Mittwoch, 6. September 2017 18:59