WPF实战学习笔记04-菜单导航

这篇具有很好参考价值的文章主要介绍了WPF实战学习笔记04-菜单导航。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

菜单导航

添加文件与文件夹

  • 添加文件夹

​ ./Extensions

  • 添加文件[类型:用户控件]

    ./Views/IndexView.xaml

    ./Views/MemoView.xaml

    ./Views/TodoView.xaml

    ./Views/SettingsView.xaml

    ./ViewModels/IndexViewModel.cs

    ./ViewModels/IndexViewModel.cs

    ./ViewModels/IndexViewModel.cs

    ./ViewModels/IndexViewModel.cs

    ./Extensions/PrismManager.cs

建立View与ViewModel关联

  • App.xaml.cs

    protected override void RegisterTypes(IContainerRegistry containerRegistry)
    {
        containerRegistry.RegisterForNavigation<IndexView, IndexViewModel>();
        containerRegistry.RegisterForNavigation<TodoView, TodoViewModel>();
        containerRegistry.RegisterForNavigation<MemoView, MemoViewModel>();
        containerRegistry.RegisterForNavigation<SettingsView, SettingsViewModel>();
    }
    

添加区域

定义区域名字
  • PrismManager.cs

    namespace Mytodo.Extensions
    {
        public static class PrismManager
        {
            public static readonly string MainViewRegionName = "MainViewRegion"; //定义Nanme变量 
        }
    }
    
注册区域,绑定名字
  • MainView.xaml

    • 定义命名空间

      xmlns:ext="clr-namespace:Mytodo.Extensions"
      
    • 注册控件区域

      <materialDesign:DrawerHost.LeftDrawerContent>
      <DockPanel>
      	<materialDesign:ColorZone...>
      	<ContentControl prism:RegionManager.RegionName="{x:Static ext:PrismManager.MainViewRegionName}" /> 
      </DockPanel>
      

添加导航

添加导航命令与变量
  • MainView.xaml.cs
private readonly IRegionManager regionManager;  //导航变量
public DelegateCommand<MenuBar> NavigateCmd { get; private set; } //导航命令
初始化导航命令
  • MainView.xaml.cs

    public MainViewModel(IRegionManager regm)
    {
        MenuBars=new ObservableCollection<MenuBar>();
        CreatMenuBar();
    
        //
        this.regionManager = regm;
        NavigateCmd = new DelegateCommand<MenuBar>(Navigate);
    }
    

    注意:初始化应在构造函数中

绑定导航命令
添加行为命名空间
  • main.xaml
xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
添加行为,绑定导航命令
  • MainView.xmal
<i:Interaction.Triggers>
    <i:EventTrigger EventName="SelectionChanged">
        <i:InvokeCommandAction Command="{Binding NavigateCmd}" CommandParameter="{Binding ElementName=menuBar, Path=SelectedItem}" />
    </i:EventTrigger>
</i:Interaction.Triggers>

​ 完整代码为:

<ListBox
    x:Name="menuBar"
    HorizontalContentAlignment="Stretch"
    ItemContainerStyle="{StaticResource MyListboxItemStyle}"
    ItemsSource="{Binding MenuBars}">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="SelectionChanged">
            <i:InvokeCommandAction Command="{Binding NavigateCmd}" CommandParameter="{Binding ElementName=menuBar, Path=SelectedItem}" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <materialDesign:PackIcon Kind="{Binding Icon}" />
                <TextBlock Margin="10,0" Text="{Binding Title}" />
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

添加导航历史功能

添加命令定义
  • MainviewModel.cs
public DelegateCommand GoBackCmd { get; private set; }
public DelegateCommand GoFwrdCmd { get; private set; }
添加导航历史变量
  • MainviewModel.cs
private  IRegionNavigationJournal journal;		//导航历史
初始化命令
  • MainviewModel.cs的构造函数中添加
    //实例化命令
    GoBackCmd = new DelegateCommand(() =>
    {
        if (journal != null && journal.CanGoBack)
            journal.GoBack();
    });
    GoFwrdCmd = new DelegateCommand(() =>
    {
        if (journal != null && journal.CanGoForward)
            journal.GoForward();
    });
绑定命令
  • MainView.xaml

    <Button
        Margin="24,0,0,0"
        materialDesign:RippleAssist.Feedback="{Binding RelativeSource={RelativeSource Self}, Path=Foreground, Converter={StaticResource BrushRoundConverter}}"
        Command="{Binding GoFwrdCmd}"
        Content="{materialDesign:PackIcon Kind=ArrowLeft,
                                          Size=24}"
        Foreground="{Binding RelativeSource={RelativeSource AncestorType={x:Type FrameworkElement}}, Path=(TextElement.Foreground)}"
        Style="{StaticResource MaterialDesignToolButton}"
        ToolTip="Previous Item" />
    
    <Button
        Margin="16,0,0,0"
        materialDesign:RippleAssist.Feedback="{Binding RelativeSource={RelativeSource Self}, Path=Foreground, Converter={StaticResource BrushRoundConverter}}"
        Command="{Binding GoBackCmd}"
        Content="{materialDesign:PackIcon Kind=ArrowRight,
                                          Size=24}"
        Foreground="{Binding RelativeSource={RelativeSource AncestorType={x:Type FrameworkElement}}, Path=(TextElement.Foreground)}"
        Style="{StaticResource MaterialDesignToolButton}"
        ToolTip="Next Item" />
    
添加自动关掉侧栏代码
  • MainView.xaml.cs文章来源地址https://www.toymoban.com/news/detail-602976.html

    menuBar.SelectionChanged += (s, e) =>
    {
        drawerHost.IsLeftDrawerOpen = false;
    };
    

到了这里,关于WPF实战学习笔记04-菜单导航的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • WPF实战学习笔记25-首页汇总

    注意:本实现与视频不一致。本实现中单独做了汇总接口,而视频中则合并到国todo接口当中了。 添加汇总webapi接口 添加汇总数据客户端接口 总数据客户端接口对接3 首页数据模型 添加数据汇总字段类 新建文件MyToDo.Share.Models.SummaryDto 添加汇总webapi接口 添加汇总接口 添加文

    2024年02月15日
    浏览(33)
  • WPF实战学习笔记16-数据加载

    新建Update事件,增加Prism事件列表 新建文件Mytodo/Common/Events/UpdateLoadingEvent.cs 新建含加载窗体基类 新建文件Mytodo/ViewModels/NavigationViewModel.cs 建立数据加载窗体扩展方法 新建文件Mytodo/Extensions/DialogExtension.cs 主窗口命名 修改文件Mytodo/Extensions/DialogExtension.cs 主窗口订阅消息 修改文

    2024年02月15日
    浏览(39)
  • WPF实战学习笔记23-首页添加功能

    实现ITodoService、IMemoService接口,并在构造函数中初始化。 新建 ObservableCollectionToDoDto 、 ObservableCollectionMemoDto 类型的属性,并将其绑定到UI中 修改Addtodo、Addmemo函数,将添加功能添加 添加添加函数 修改文件:Mytodo.ViewModels.IndexViewModel.cs

    2024年02月15日
    浏览(36)
  • WPF实战学习笔记08-创建数据库

    创建文件夹 ./Context 创建文件 ./Context/BaseEnity.cs ./Context/Memo.cs ./Context/MyTodoContext.cs ./Context/Todo.cs ./Context/User.cs 创建数据对象 ./Context/BaseEnity.cs ./Context/Memo.cs ./Context/MyTodoContext.cs 创建数据库DbSet ./Context/Todo.cs ./Context/User.cs 添加nuget包 Microsoft.EntityFrameworkCore.Design Shared design-time co

    2024年02月16日
    浏览(42)
  • WPF实战学习笔记06-设置待办事项界面

    创建待办待办事项集合并初始化 TodoViewModel: 创建绑定右侧命令、变量 设置界面

    2024年02月15日
    浏览(48)
  • WPF实战学习笔记30-登录、注册服务添加

    添加注册数据类型 添加注册UI 修改bug UserDto的UserName更改为可null类型 Resgiter 添加加密方法 修改控制器 添加注册数据类型 添加文件MyToDo.Share.Models.ResgiterUserDto.cs 添加注册UI 修改文件:Mytodo.Views.LoginView.xaml 添加注册、登录、退出等功能实现以及功能的字段 修改bug UserDto的User

    2024年02月14日
    浏览(33)
  • WPF实战学习笔记31-登录界面全局通知

    UI添加消息聚合器 注册提示消息 文件:Mytodo.Views.LoginView.cs构造函数添加内容 在需要的地方添加提示消息 修改文件:Mytodo.ViewModels.LoginViewModel.cs

    2024年02月14日
    浏览(40)
  • WPF实战学习笔记24-首页编辑与完成

    indexview添加Listbox控件的鼠标双击行为 添加todo、memo的编辑命令 indexviewmodel添加对应的更新事件处理 添加ToggleButton与后台的绑定 将ToggleButton的ischeck绑定到status属性 添加bool int 转换器 添加完成命令 添加完成功能函数 Listbox添加行为 给行为添加命令空间 文件:Mytodo.Views.IndexV

    2024年02月14日
    浏览(34)
  • WPF实战学习笔记18-优化设计TodoView

    修复新增项目无法编辑问题 更新MyToDo.Api/Service/ToDoService.cs 更新MyToDo.Api/Service/MemoService.cs 增加了对完成状态的区分 更新MyToDo.Api/Service/TodoView.xaml 增加了选项卡删除功能 更新删除请求URI 更新MyToDo.Api/Service/Baservice.cs 添加删除命令并初始化 更新文件:MyToDo/ViewModel/TodoViewModel.cs

    2024年02月15日
    浏览(37)
  • WPF实战学习笔记10-创建todo接口

    新建控制器 新建文件 + webapi工程 ./Controllers/TodoController.cs 添加类 ### 新建服务 #### 新建文件 + webapi工程 ./Service/ApiReponse.cs ./Service/IBaseService.cs ./Service/IToDoService.cs ./Service/ToDoService.cs 添加通用返回结果类 ApiReponse.cs 添加基础接口 IBaseService.cs 添加todo接口 IToDoService.cs 添加TODO接口

    2024年02月16日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包