Создать собственное меню с помощью кнопки wpf - PullRequest
0 голосов
/ 21 октября 2019

Это моя пользовательская строка заголовка:

Custom TitleBar

Эта трехточечная кнопка является кнопкой управления. Я хочу создать подобное меню (нарисованное краской!):

enter image description here

Но я понятия не имею. Я знаю, что есть элемент управления «Меню», но я не мог использовать его так, как хотел.

Код кнопки «Еще»:

<Button x:Name="More" Grid.Column="1" Style="{DynamicResource TitleBarButton}" IsTabStop="False" Focusable="False">
    <Button.Background>
        <ImageBrush ImageSource="icons/More.png"/>
    </Button.Background>
</Button>

Ответы [ 2 ]

1 голос
/ 22 октября 2019

введите описание изображения здесь

Возможно, вам понадобятся пункты меню настройки, чтобы действовать как кнопки (больше функций кнопок WPF int в этой книге )

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="40" />
        <RowDefinition Height="40" />
        <RowDefinition Height="40" />

    </Grid.RowDefinitions>

    <Grid Grid.Row="0" Background="Green">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="1.0*" />
            <ColumnDefinition Width="40" />
            <ColumnDefinition Width="40" />
            <ColumnDefinition Width="40" />
        </Grid.ColumnDefinitions>

        <Grid Grid.Column="1" >
            <Menu Height="40" Width="40" Background="Green" >
                <MenuItem >

                    <!-- MENU HEADER -->
                    <MenuItem.Header>
                        <Border>
                            <Image Source="/WpfMenuButton;component/Images/DotsImg.PNG" />
                        </Border>

                    </MenuItem.Header>

                    <!-- MENU ITEM UPDATE -->
                    <MenuItem Click="CheckUpdate_Click" Background="Chocolate">

                        <MenuItem.Header>
                            <TextBlock Text="Check for update" VerticalAlignment="Center" HorizontalAlignment="Center" 
                            Height="30" Width="100" />
                        </MenuItem.Header>

                    </MenuItem>

                    <!-- MENU ITEM WIFI -->
                    <MenuItem Click="DoSomethingElse_Click" Background="LightGreen">
                        <MenuItem.Header>
                            <TextBlock Text="Do something else" VerticalAlignment="Center"
                                HorizontalAlignment="Center" Height="30" Width="140" />
                        </MenuItem.Header>
                    </MenuItem>

                    <!-- MENU ITEM ABOUT -->
                    <MenuItem Click="MenuAbout_Click" Background= "LightBlue">

                        <MenuItem.Header>
                            <TextBlock Text="About" VerticalAlignment="Center" HorizontalAlignment="Center" 
                                Height="30" Width="140" />
                        </MenuItem.Header>

                    </MenuItem>

                </MenuItem>
            </Menu>

        </Grid>
        <Grid Grid.Column="2" >
            <Button Content="-" Foreground="White" FontSize="28" Background="Green"/>
        </Grid>
        <Grid Grid.Column="3" >
            <Button Content="X" Foreground="White" FontSize="28" Background="Green"/>
        </Grid>

    </Grid>

</Grid>
1 голос
/ 21 октября 2019

Вы можете заменить Button на ToggleButton и использовать Popup, который вы связываете со свойством ToggleButton 'IsChecked:

<ToggleButton x:Name="More" Grid.Column="1" Style="{DynamicResource TitleBarButton}" IsTabStop="False" Focusable="False">
    <ToggleButton.Background>
        <ImageBrush ImageSource="icons/More.png"/>
    </ToggleButton.Background>
</ToggleButton>
<Popup IsOpen="{Binding IsChecked, ElementName=More}"
               PlacementTarget="{Binding ElementName=More}"
               Placement="Bottom">
    <StackPanel Width="100" Background="Yellow">
        <TextBlock Text="Check For Updates" />
        <Grid Background="DarkGray" Height="3" />
        <TextBlock Text="Do something else" />
    </StackPanel>
</Popup>

Вы, конечно, можете заменитьсодержимое Popup с чем угодно.

...