久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

如何在 WPF 中創(chuàng)建具有 Microsoft Web 應(yīng)用程序樣式的

How to create a menu in WPF that has Microsoft Web Application styling(如何在 WPF 中創(chuàng)建具有 Microsoft Web 應(yīng)用程序樣式的菜單)
本文介紹了如何在 WPF 中創(chuàng)建具有 Microsoft Web 應(yīng)用程序樣式的菜單的處理方法,對大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!

問題描述

我們的任務(wù)是在 WPF 中設(shè)計(jì)一個(gè)企業(yè)應(yīng)用程序,該應(yīng)用程序?qū)⑷〈鷳?zhàn)艦灰色 Winforms 應(yīng)用程序,使其具有現(xiàn)代感.

我們喜歡 Microsoft Web 應(yīng)用程序當(dāng)前擁有的外觀和感覺:

我們可以用通常的方式在 WPF 中創(chuàng)建這些菜單:

<Menu DockPanel.Dock="Top"><MenuItem Header="_File"><MenuItem Header="_New"/><MenuItem Header="_Open"/><MenuItem Header="_Save"/><分隔符/><MenuItem Header="_Exit"/></菜單項(xiàng)></菜單><TextBox AcceptsReturn="True"/></DockPanel>

但我們會(huì)得到一些看起來像 Winforms 菜單的東西.

我見過一些相當(dāng)令人印象深刻的樣式設(shè)計(jì),例如

這是 XAML.我選擇為每個(gè) MenuItem 使用自定義控件模板.我認(rèn)為當(dāng)您需要真正自定義每個(gè)項(xiàng)目時(shí),它非常實(shí)用.

<窗口.資源><BooleanToVisibilityConverter x:Key="btv"/><!-- 設(shè)置頂級菜單項(xiàng)的樣式--><ControlTemplate x:Key="VsMenuTop" TargetType="MenuItem"><StackPanel TextBlock.FontSize="15px" Height="40"><!-- 標(biāo)簽、圖標(biāo)等--><Label Content="{TemplateBinding Header}" Margin="5" Foreground="White"/><!-- 子項(xiàng)目--><Popup IsOpen="{TemplateBinding IsSubmenuOpen}" AllowsTransparency="True" Focusable="False"><Border BorderThickness="1" Background="White" BorderBrush="#E0E0E0"><StackPanel IsItemsHost="True"/></邊框></彈出窗口><StackPanel.Style><Style TargetType="StackPanel"><Style.Triggers><Trigger Property="IsMouseOver" Value="True"><Setter Property="Background" Value="#106EBE"/></觸發(fā)器></Style.Triggers></風(fēng)格></StackPanel.Style></StackPanel></控制模板><!-- 設(shè)置非頂級菜單項(xiàng)的樣式--><ControlTemplate x:Key="VsMenuSub" TargetType="MenuItem"><DockPanel TextBlock.FontSize="15px" x:Name="panel"><!-- 標(biāo)簽、圖標(biāo)等--><Image Source="{Binding Icon, RelativeSource={RelativeSource TemplatedParent}}" Width="20" Margin="5,0"/><Label Content="{TemplateBinding Header}" Foreground="Black" Margin="0,5,5,5"/><!-- 僅當(dāng)此菜單項(xiàng)有子項(xiàng)時(shí)才繪制向右箭頭 --><Image Source="icon_right.png" Visibility="{Binding HasItems, Converter={StaticResource btv}, RelativeSource={RelativeSource TemplatedParent}}"/><!-- 子項(xiàng)目--><Popup IsOpen="{TemplateBinding IsSubmenuOpen}" AllowsTransparency="True" Focusable="False" Placement="Right" ><Border BorderThickness="1" Background="White" BorderBrush="#E0E0E0"><StackPanel IsItemsHost="True"/></邊框></彈出窗口></DockPanel><ControlTemplate.Triggers><Trigger Property="IsHighlighted" Value="True"><Setter Property="Background" TargetName="panel" Value="#EFF6FC"/></觸發(fā)器></ControlTemplate.Triggers></控制模板><!-- 設(shè)置分隔符的樣式--><ControlTemplate x:Key="VsMenuSep" TargetType="分隔符"><邊框高度="1" 背景="#E0E0E0"/></控制模板><!-- 設(shè)置 VSOnline 的樣式--><ControlTemplate x:Key="VsOnline" TargetType="MenuItem"><StackPanel TextBlock.FontSize="15px" Height="40" Orientation="Horizo??ntal" Background="#005A9E"><Label Content="{TemplateBinding Header}" Margin="5" Foreground="White"/><Image Source="icon_down.png" Height="20" Margin="0,0,5,0"/><!-- 子項(xiàng)目--><Popup IsOpen="{TemplateBinding IsSubmenuOpen}" AllowsTransparency="True" Focusable="False"><Border BorderThickness="1" Background="White" BorderBrush="#E0E0E0"><StackPanel IsItemsHost="True"/></邊框></彈出窗口></StackPanel></控制模板><!-- 一些基本的東西--><Style TargetType="菜單"><Setter Property="Background" Value="#0078D7"/><Setter Property="Height" Value="40px"/></風(fēng)格></Window.Resources><!-- 真正的應(yīng)用程序和真正的菜單--><堆棧面板><Menu IsMainMenu="True"><MenuItem Header="_VSOnline" Template="{StaticResource VsOnline}" ><MenuItem Header="_Whatever" Template="{StaticResource VsMenuSub}"/></菜單項(xiàng)><MenuItem Header="_Dashboards" Template="{StaticResource VsMenuTop}"><MenuItem Header="_Overview" Template="{StaticResource VsMenuSub}"/></菜單項(xiàng)><MenuItem Header="_Code" Template="{StaticResource VsMenuTop}"><MenuItem Header="_Files" Template="{StaticResource VsMenuSub}"/><MenuItem Header="_Commits" Template="{StaticResource VsMenuSub}"/><MenuItem Header="_Pushes" Template="{StaticResource VsMenuSub}"/></菜單項(xiàng)><MenuItem Header="_Work" Template="{StaticResource VsMenuTop}"><MenuItem Header="_Backlogs" Template="{StaticResource VsMenuSub}" Icon="icon_backlogs.png"/><MenuItem Header="_Queries" Template="{StaticResource VsMenuSub}" Icon="icon_queries.png"/><Separator Template="{StaticResource VsMenuSep}"/><MenuItem Header="_New Work Item" Template="{StaticResource VsMenuSub}"><MenuItem Header="_Epic" Template="{StaticResource VsMenuSub}" Icon="icon_epic.png"/><MenuItem Header="_Feature" Template="{StaticResource VsMenuSub}" Icon="icon_feature.png"/><MenuItem Header="_Issue" Template="{StaticResource VsMenuSub}" Icon="icon_issue.png"/><MenuItem Header="_Task" Template="{StaticResource VsMenuSub}" Icon="icon_task.png"/><MenuItem Header="_Test Case" Template="{StaticResource VsMenuSub}" Icon="icon_testcase.png"/><MenuItem Header="_User Story" Template="{StaticResource VsMenuSub}" Icon="icon_userstory.png"/></菜單項(xiàng)><MenuItem Header="_Bug" Template="{StaticResource VsMenuSub}" Icon="icon_bug.png"/></菜單項(xiàng)></菜單></StackPanel></窗口>

該項(xiàng)目可在 此處在 github 上獲得.

We have been tasked with designing an enterprise application in WPF that will replace a battleship grey Winforms application with a modern look and feel.

We like the look and feel that Microsoft web applications currently possess:

We could create these menus in WPF in the usual way:

<DockPanel>
    <Menu DockPanel.Dock="Top">
        <MenuItem Header="_File">
            <MenuItem Header="_New" />
            <MenuItem Header="_Open" />
            <MenuItem Header="_Save" />
            <Separator />
            <MenuItem Header="_Exit" />
        </MenuItem>
    </Menu>
    <TextBox AcceptsReturn="True" />
</DockPanel>

But we'd get something that looks like a Winforms menu.

I've seen some rather impressive styling efforts like this one, but they all seem to have the same familiar Winforms shape. I've also seen menus in libraries like MahApps Metro, but these strike us as too spartan.

Is the WPF Menu control flexible enough to be styled as shown in the picture above, or should we go another route like building a custom menu control from Stack Panels and Lists? What are the tradeoffs?

Bonus points (i.e. a bounty) will be awarded for xaml/code that does exactly this.

An example of this menu style in action:
https://www.visualstudio.com/

解決方案

WPF was really designed with the possibility to change the look and behavior of every out-of-the-box mechanisms / controls (buttons, menus, treeview, etc.). So, in general, it's better to do this rather than to rewrite everything. For example, if you redesign your custom menu, you'll have to think about keyboard, UI automation, etc...

So, I gave a shot at your example and tried to build a minimum working sample - pure XAML - that mimics VS online menu (I've also added the hover background color change that's not by default in WPF's menu).

Here is the result and, as you see, it looks very similar:

Here is the XAML. I've chosen to use a custom control template per each MenuItem. I think it's quite practical when you need to really customize every item.

<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="550" Width="525">
    <Window.Resources>
        <BooleanToVisibilityConverter x:Key="btv" />

        <!-- style a top level menu item -->
        <ControlTemplate x:Key="VsMenuTop" TargetType="MenuItem">
            <StackPanel TextBlock.FontSize="15px" Height="40">
                <!-- label, icons, etc. -->
                <Label Content="{TemplateBinding Header}" Margin="5" Foreground="White" />

                <!-- sub items -->
                <Popup IsOpen="{TemplateBinding IsSubmenuOpen}" AllowsTransparency="True" Focusable="False">
                    <Border BorderThickness="1" Background="White" BorderBrush="#E0E0E0">
                        <StackPanel IsItemsHost="True" />
                    </Border>
                </Popup>
                <StackPanel.Style>
                    <Style TargetType="StackPanel">
                        <Style.Triggers>
                            <Trigger Property="IsMouseOver"  Value="True">
                                <Setter Property="Background" Value="#106EBE" />
                            </Trigger>
                        </Style.Triggers>
                    </Style>
                </StackPanel.Style>
            </StackPanel>
        </ControlTemplate>

        <!-- style a non-top level menu item -->
        <ControlTemplate x:Key="VsMenuSub" TargetType="MenuItem">
            <DockPanel TextBlock.FontSize="15px" x:Name="panel">
                <!-- label, icons, etc. -->
                <Image Source="{Binding Icon, RelativeSource={RelativeSource TemplatedParent}}" Width="20" Margin="5,0" />
                <Label Content="{TemplateBinding Header}" Foreground="Black" Margin="0,5,5,5" />

                <!-- draw the right arrow only if this menu item has sub items -->
                <Image Source="icon_right.png" Visibility="{Binding HasItems, Converter={StaticResource btv}, RelativeSource={RelativeSource TemplatedParent}}" />

                <!-- sub items -->
                <Popup IsOpen="{TemplateBinding IsSubmenuOpen}" AllowsTransparency="True" Focusable="False" Placement="Right" >
                    <Border BorderThickness="1" Background="White" BorderBrush="#E0E0E0">
                        <StackPanel IsItemsHost="True" />
                    </Border>
                </Popup>
            </DockPanel>
            <ControlTemplate.Triggers>
                <Trigger Property="IsHighlighted" Value="True">
                    <Setter Property="Background" TargetName="panel" Value="#EFF6FC" />
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>

        <!-- style the separator -->
        <ControlTemplate x:Key="VsMenuSep" TargetType="Separator">
            <Border Height="1" Background="#E0E0E0" />
        </ControlTemplate>

        <!-- style the VSOnline -->
        <ControlTemplate x:Key="VsOnline" TargetType="MenuItem">
            <StackPanel TextBlock.FontSize="15px" Height="40" Orientation="Horizontal" Background="#005A9E">
                <Label Content="{TemplateBinding Header}" Margin="5" Foreground="White" />
                <Image Source="icon_down.png" Height="20" Margin="0,0,5,0" />

                <!-- sub items -->
                <Popup IsOpen="{TemplateBinding IsSubmenuOpen}" AllowsTransparency="True" Focusable="False">
                    <Border BorderThickness="1" Background="White" BorderBrush="#E0E0E0">
                        <StackPanel IsItemsHost="True" />
                    </Border>
                </Popup>
            </StackPanel>
        </ControlTemplate>

        <!-- some base stuff -->
        <Style TargetType="Menu">
            <Setter Property="Background" Value="#0078D7" />
            <Setter Property="Height" Value="40px" />
        </Style>

    </Window.Resources>

    <!-- the real app and real menu -->
    <StackPanel>
        <Menu IsMainMenu="True">
            <MenuItem Header="_VSOnline" Template="{StaticResource VsOnline}" >
                <MenuItem Header="_Whatever" Template="{StaticResource VsMenuSub}" />
            </MenuItem>
            <MenuItem Header="_Dashboards" Template="{StaticResource VsMenuTop}">
                <MenuItem Header="_Overview" Template="{StaticResource VsMenuSub}" />
            </MenuItem>
            <MenuItem Header="_Code" Template="{StaticResource VsMenuTop}">
                <MenuItem Header="_Files" Template="{StaticResource VsMenuSub}" />
                <MenuItem Header="_Commits" Template="{StaticResource VsMenuSub}" />
                <MenuItem Header="_Pushes" Template="{StaticResource VsMenuSub}" />
            </MenuItem>
            <MenuItem Header="_Work" Template="{StaticResource VsMenuTop}">
                <MenuItem Header="_Backlogs" Template="{StaticResource VsMenuSub}" Icon="icon_backlogs.png" />
                <MenuItem Header="_Queries" Template="{StaticResource VsMenuSub}" Icon="icon_queries.png" />
                <Separator Template="{StaticResource VsMenuSep}" />
                <MenuItem Header="_New Work Item" Template="{StaticResource VsMenuSub}">
                    <MenuItem Header="_Epic" Template="{StaticResource VsMenuSub}" Icon="icon_epic.png" />
                    <MenuItem Header="_Feature" Template="{StaticResource VsMenuSub}" Icon="icon_feature.png" />
                    <MenuItem Header="_Issue" Template="{StaticResource VsMenuSub}" Icon="icon_issue.png" />
                    <MenuItem Header="_Task" Template="{StaticResource VsMenuSub}" Icon="icon_task.png" />
                    <MenuItem Header="_Test Case" Template="{StaticResource VsMenuSub}" Icon="icon_testcase.png" />
                    <MenuItem Header="_User Story" Template="{StaticResource VsMenuSub}" Icon="icon_userstory.png" />
                </MenuItem>
                <MenuItem Header="_Bug" Template="{StaticResource VsMenuSub}" Icon="icon_bug.png" />
            </MenuItem>
        </Menu>
    </StackPanel>
</Window>

The project is available here on github.

這篇關(guān)于如何在 WPF 中創(chuàng)建具有 Microsoft Web 應(yīng)用程序樣式的菜單的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

LINQ to SQL and Concurrency Issues(LINQ to SQL 和并發(fā)問題)
Yield return from a try/catch block(try/catch 塊的收益回報(bào))
Should I call Parameters.Clear when reusing a SqlCommand with a transation?(重用帶有事務(wù)的 SqlCommand 時(shí),我應(yīng)該調(diào)用 Parameters.Clear 嗎?)
what does a using statement without variable do when disposing?(處理時(shí)不帶變量的 using 語句有什么作用?)
Why doesn#39;t TransactionScope work with Entity Framework?(為什么 TransactionScope 不適用于實(shí)體框架?)
How to dispose TransactionScope in cancelable async/await?(如何在可取消的 async/await 中處理 TransactionScope?)
主站蜘蛛池模板: 日本色综合 | 免费看91 | 亚洲激情在线观看 | 久久久国产一区二区三区 | 亚洲一区二区三区免费视频 | 亚洲国产精品人人爽夜夜爽 | 亚洲综合二区 | 欧美v在线 | 国产精品久久久久久模特 | 福利网站在线观看 | av资源网站 | 国产精品欧美精品 | 99视频在线免费观看 | 日韩在线视频一区二区三区 | 老子午夜影院 | 亚洲国产aⅴ精品一区二区 免费观看av | 免费视频成人国产精品网站 | 久久涩涩 | 天天色天天射天天干 | 91高清在线观看 | 午夜av免费 | 成人午夜电影网 | 久久国产精品一区 | 免费国产黄网站在线观看视频 | www.久久精品 | 国产午夜精品久久久久免费视高清 | 男人天堂网站 | 午夜精品久久久久久久久久久久 | 久草在线中文888 | 国产91在线 | 亚洲 | 国产精品久久久久久久久久久久 | 中文字幕一区二区三区在线观看 | 亚洲精品一区二区三区丝袜 | 亚洲国产aⅴ精品一区二区 免费观看av | 亚洲一区在线观看视频 | 国产精品免费高清 | 久久久www成人免费无遮挡大片 | 99久久99| 久久国产香蕉 | 2020天天操 | 欧美毛片免费观看 |