首页 > 其他分享 >Halcon 学习笔记(4):导航首页

Halcon 学习笔记(4):导航首页

时间:2024-07-11 23:32:58浏览次数:8  
标签:regionManager regoin 笔记 Halcon callBack 首页 跳转 services ListBox

目录

前言

这次主要是UI界面的学习和复习

数据模板,ListBox

ListBox算是最常用的数据模板了

  • ListBox
    • ListBox.ItemsPanel:布局容器申明
    • ListBox.ItemContainerStyle:
      • Style,Property=Template:
        • ControlTemplate TargetType="ListBoxItem":子项样式
          • ContentPresenter:子项展示内容
            • TemplateBinding:绑定模板控件对应属性
    • ListBox.ItemTemplate:
      • DataTemplate:子项数据

举例

 <!--ItemsSource,声明数据源-->
 <ListBox ItemsSource="{Binding NavigationMenuService.Items}"
          x:Name="listMenuBox"
          Grid.Column="1">
     <!--ItemsPanel,设置容器-->
     <ListBox.ItemsPanel>
         <ItemsPanelTemplate>
             <StackPanel Orientation="Horizontal" />
         </ItemsPanelTemplate>
     </ListBox.ItemsPanel>
     <!--ItemContainerStyle,设置子项样式-->

     <ListBox.ItemContainerStyle>
         <Style TargetType="ListBoxItem">
             <Setter Property="FocusVisualStyle"
                     Value="{x:Null}" />
             <!--ItemContainerStyle,设置子项样式模板-->
             <Setter Property="Template">
                 <Setter.Value>
                     <!--ControlTemplate,确定设置的是ListBoxItem-->

                     <ControlTemplate TargetType="ListBoxItem">
                         <Grid>
                             <Border x:Name="border" />
                             <Border x:Name="borderHeader"
                                     Background="{TemplateBinding Background}" />
                             <!--ContentPresenter,就是ListItem的代称-->
                             <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                               VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                               TextBlock.Foreground="{TemplateBinding Foreground}" />
                         </Grid>
                     </ControlTemplate>
                 </Setter.Value>
             </Setter>
         </Style>
     </ListBox.ItemContainerStyle>
     <!--数据源,其实就是上面的ContentPresenter -->
     <ListBox.ItemTemplate>
         <DataTemplate>
             <StackPanel Orientation="Horizontal">
                 <!--<md:PackIcon Kind="{Binding IconStr}"
                              Width="20"
                              Height="20" />-->
                 <TextBlock Text="{Binding Title}"
                            Margin="10,0"
                            FontSize="16" />
             </StackPanel>
         </DataTemplate>
     </ListBox.ItemTemplate>
 </ListBox>

触发器

触发器又好几种,但是最简单的就是Trigger。Wpf哪里都好,就是太罗嗦了。注意,使用TargetName的时候,就没有智能提示了,只能手撸。要么就在对应的地方触发智能提示然后复制粘贴过来

    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="FocusVisualStyle"
                    Value="{x:Null}" />
            <!--ItemContainerStyle,设置子项样式模板-->
            <Setter Property="Template">
                <Setter.Value>
                    <!--ControlTemplate,确定设置的是ListBoxItem-->

                    <ControlTemplate TargetType="ListBoxItem">
                        <Grid>
                            <Border x:Name="border" />
                            <Border x:Name="borderHeader"
                                    Background="{TemplateBinding Background}" />
                            <!--ContentPresenter,就是ListItem的代称-->
                            <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                                              VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                                              TextBlock.Foreground="{TemplateBinding Foreground}" />
                        </Grid>
                        <!--这里使用TargetName 就没有智能提示了-->
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsSelected"
                                     Value="True">
                                <Setter TargetName="border"
                                        Property="BorderBrush"
                                        Value="#fff" />
                                <Setter TargetName="border"
                                        Property="BorderThickness"
                                        Value="0,0,0,3" />
                                <Setter TargetName="borderHeader"
                                        Property="Background"
                                        Value="#fff" />
                                <Setter TargetName="borderHeader"
                                        Property="Opacity"
                                        Value="0.1" />
                            </Trigger>
                            <Trigger Property="IsMouseOver"
                                     Value="True">

                                <Setter TargetName="border"
                                        Property="BorderBrush"
                                        Value="#fff" />
                                <Setter TargetName="border"
                                        Property="BorderThickness"
                                        Value="0,0,0,3" />
                                <Setter TargetName="borderHeader"
                                        Property="Background"
                                        Value="#fff" />
                                <Setter TargetName="borderHeader"
                                        Property="Opacity"
                                        Value="0.1" />
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </ListBox.ItemContainerStyle>
</ListBox>

行为

我个人认为行为是相当于给event绑定触发事件。他的用处就是方便Binding导入CommandParameter。

<i:Interaction.Triggers>
    <i:EventTrigger EventName="SelectionChanged">
        <i:InvokeCommandAction Command="{Binding NavigateCommand}"
                               CommandParameter="{Binding ElementName=listMenuBox,Path=SelectedItem}" />
    </i:EventTrigger>
</i:Interaction.Triggers>

regoin使用

注册regoin命名空间,比如MainViewRegion

<!--注册MainViewRegion-->
<ContentControl prism:RegionManager.RegionName="MainViewRegion"
                x:Name="MainViewContentControl" Grid.Row="1" />

Ioc获取Resion管理器

        private readonly IRegionManager regionManager;


        public MainViewModel(IRegionManager regionManager)
        {
            this.regionManager = regionManager;
        }

添加跳转命令

/// <summary>
/// 跳转Regoin
/// </summary>
/// <param name="pageName">跳转的pageName的名称</param>
private void NavigatePage(string pageName)
{
    regionManager.Regions[regoin对应的名称,比如之前我们定义的MainViewRegion]
        .RequestNavigate(pageName, callBack =>
        {
            //打印回调函数,判断region是否跳转成功
            var result = callBack.Result;

            if (result == null) {
                Debug.WriteLine(callBack.Error.Message);
            }else if (!(bool)result)
            {
                Debug.WriteLine(callBack.Error.Message);

            }
        });
}

简单逻辑

声明:region,触发regionManager跳转功能,带入regionName和跳转对应的view。注意,我们这个必须提前Ioc注册了才行

        /// <summary>
        /// Ioc注入
        /// </summary>
        /// <param name="services"></param>
   protected override void RegisterTypes(IContainerRegistry services)
   {
       services.RegisterForNavigation<MainView, MainViewModel>();
       services.RegisterForNavigation<DashboardView, DashboardViewModel>();
       services.RegisterSingleton<NavigationMenuService>();
   }

标签:regionManager,regoin,笔记,Halcon,callBack,首页,跳转,services,ListBox
From: https://www.cnblogs.com/gclove2000/p/18294964

相关文章

  • 域内提权(学习笔记)
    前言:域内提权就是把普通域用户提权到域管用户首先先通过web打到域内机器,先获取一个普通的域内成员用户,执行shellipconfig/all可以看到,该用户为域内用户,再执行命令,发现所在组为domainusers中,进而确定为域内普通用户shellnetuserwz/domain一.MS14-068漏洞a.kerber......
  • ‘AI’第二课堂笔记记录(python基础)
    一、miniconda下载链接:https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Windows-x86_64.exe或者去清华大学开源软件镜像站下载https://mirrors.tuna.tsinghua.edu.cn/(开始下载程序后勾选添加到环境变量,一直下一步即可)使用创建环境condacre......
  • liunx笔记2
    RHEL和centos是何关系CentOS通常会稍滞后于RHEL新版本的发布,因为它需要等待RHEL发布源代码后进行重新编译和测试。CentOS是通过重新编译RHEL的源代码而来,因此它们在软件包和功能上非常接近,但CentOS不包含RHEL商业支持的服务和特定工具。软连接和硬连接区别1通常......
  • liunx笔记1
    线程池的基本概念是,在应用程序启动时创建一定数量的线程,并将它们保存在线程池中。当需要执行任务时,从线程池中获取一个空闲的线程,将任务分配给该线程执行。当任务执行完毕后,线程将返回到线程池,可以被其他任务复用。sql与mysql的区别SQL是一种用于操作数据库的语言,MySQL是市......
  • 【嵌入式】linux开发笔记:编辑器vi的基本指令
    ‘vi的使用’:Linux中常用的文本编辑器vi的使用方法。包括’模式’、‘输入模式’、‘按键入’、‘看到insert就能编辑代码’、‘退出vi保存代码’等。‘gcc编译工具’:这部分介绍了Linux中常用的编译工具gcc的使用方法。包括’运行’、’./程序名’等。‘文件管理’:这部......
  • Halcon学习笔记——Day2
    十四、halcon运行方式1、单步运行F62、F2重置程序执行3、F5连续运行,遇到stop或者断点会停止十五、特征直方图1、横坐标表示特征的值,纵坐标表示连通域的个数十六、灰度直方图1、threshold、scale_image2、行坐标表示灰度值 3、纵坐标表示像素个数十七、通过工具栏......
  • 实战Qt开发WordBN笔记软件#02 通过Gitee创建YourWordBN仓库;学会GIT常用指令,并实现多分
    01背景【WordBN字远笔记】是天恩软件工作室开发的一款免费笔记软件;WordBN基于VS2019、Qt6.5开发,使用QtQuick(QML)开发语言。本课程将以【WordBN字远笔记】的界面为实战基础,详细介绍如何基于Qt/QML开发语言,从零开始开发一套真正的程序,包括国际化、版本发布、安装包制作等项目......
  • Vue3+ts 尚硅谷笔记(2024版)
    1.简介B站视频是尚硅谷Vue3+typescript天禹老师2.介绍1.1.【性能的提升】打包大小减少41%。初次渲染快55%,更新渲染快133%。内存减少54%。1.2.【源码的升级】使用Proxy代替defineProperty实现响应式。重写虚拟DOM的实现和Tree-Shaking。1.3.【拥抱TypeScript】Vue3......
  • 华为昇腾训练营笔记-Ascend C算子开发
     一、核函数开发核函数(KernelFunction)是AscendC算子设备侧实现的入口。在核函数中,需要为在一个核上执行的代码规定要进行的数据访问和计算操作,当核函数被调用时,多个核都执行相同的核函数代码,具有相同的参数,并行执行。 核函数的定义为:extern"C"__global____aicore__vo......
  • 学习笔记——二叉平衡树(BST)
    二叉平衡树(BST)BST是一种数据结构,用于快速查找数据。二叉平衡树有一个非常明显的特性:对于每一个节点\(u\),在其左边的数都比它小,在其右边待数都比它大。每个点都有一个权值cnt,用于存储这个数出现了几次。在二叉平衡树上的每一个操作的时间与其树高成正比,约为\(O(\logn)\)。......