wpf 制作丝滑Flyout浮出侧边栏Demo (Mahapps UI框架)

在这里插入图片描述
Flyout 属性

  • CloseButtonVisibility: 设置为 Collapsed,意味着关闭按钮不可见。
  • TitleVisibility: 设置为 Collapsed,意味着标题不可见。
  • IsPinned: 设置为 True,意味着这个 Flyout 会固定住,不会自动关闭。
  • Opacity: 设置为 1,意味着完全不透明。
  • Position: 设置为 Right,意味着这个 Flyout 会出现在右侧。
  • Width: 设置为 auto,意味着宽度会根据内容自动调整。
  • Background: 背景色设置为 AliceBlue。
  • IsOpen: 设置为 False,意味着默认情况下这个 Flyout 是关闭的。
<controls:Flyout x:Class="ControlsTest.FloatingBox"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:ControlsTest"mc:Ignorable="d" xmlns:controls="http://metro.mahapps.com/winfx/xaml/controls" CloseButtonVisibility="Collapsed" TitleVisibility="Collapsed" IsPinned="True" Opacity="1"Position="Right" Width="auto" Background="AliceBlue" IsOpen="False"><Grid><Grid.ColumnDefinitions><ColumnDefinition/><ColumnDefinition/></Grid.ColumnDefinitions><StackPanel Grid.Row="0"><Button Content="123" Width="50"/><Button Width="50" Content="345"/></StackPanel><StackPanel Grid.Column="1"><Button Content="123" Width="30" Height="50" Click="Button_Click_1"/></StackPanel></Grid>
</controls:Flyout>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;namespace ControlsTest
{/// <summary>/// FloatingBox.xaml 的交互逻辑/// </summary>public partial class FloatingBox{public FloatingBox(){InitializeComponent();}public static readonly DependencyProperty ButtonClickCommandProperty =DependencyProperty.Register("ButtonClickCommand", typeof(ICommand), typeof(FloatingBox), new PropertyMetadata(null));public ICommand ButtonClickCommand{get { return (ICommand)GetValue(ButtonClickCommandProperty); }set { SetValue(ButtonClickCommandProperty, value); }}private void Button_Click_1(object sender, RoutedEventArgs e){if (ButtonClickCommand != null && ButtonClickCommand.CanExecute(null)){ButtonClickCommand.Execute(null);}}}
}
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Data;
using System.Windows;namespace ControlsTest
{public class BoolToCollapsedConverter : IValueConverter{public object Convert(object value, Type targetType, object parameter, CultureInfo culture){Visibility result = Visibility.Collapsed;if (value == null || value == DependencyProperty.UnsetValue){return result;}string para = parameter as string;if (string.IsNullOrWhiteSpace(para)) {result = (((bool)value) ? Visibility.Collapsed : Visibility.Visible);return result;}if (string.Equals(para, "reverse", StringComparison.OrdinalIgnoreCase)){result = ((!(bool)value) ? Visibility.Collapsed : Visibility.Visible);return result;}return result;}public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture){return value;}}
}
<Window x:Class="ControlsTest.MainWindow"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:ControlsTest"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><Grid><Grid.RowDefinitions><RowDefinition Height="*"/><RowDefinition Height="*"/></Grid.RowDefinitions><StackPanel><Button Width="50"/></StackPanel><Grid Grid.Row="1"><Button Content="Open" Height="30" Width="50" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0,20,40,0" Click="Button_Click" Visibility="{Binding FbisOpen,Converter={StaticResource BoolToCollapsed}}" Background="Red"/><local:FloatingBox IsOpen="{Binding FbisOpen,UpdateSourceTrigger=PropertyChanged}" Height="100" ButtonClickCommand="{Binding ButtonClickCommand}"/></Grid></Grid>
</Window>
using PropertyChanged;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;namespace ControlsTest
{/// <summary>/// Interaction logic for MainWindow.xaml/// </summary>[AddINotifyPropertyChangedInterface]public partial class MainWindow : Window{public MainWindow(){InitializeComponent();DataContext = this;ButtonClickCommand = new RelayCommand(OnButtonClick);}private void OnButtonClick(){FbisOpen = false;}private bool fbisOpen = true;public bool FbisOpen{get { return fbisOpen; }set { fbisOpen = value; }} public ICommand ButtonClickCommand { get; set; }private void Button_Click(object sender, RoutedEventArgs e){if(FbisOpen){FbisOpen = false;}else{FbisOpen = true;}}}public class RelayCommand : ICommand{private readonly Action _execute;private readonly Func<bool> _canExecute;public RelayCommand(Action execute, Func<bool> canExecute = null){_execute = execute ?? throw new ArgumentNullException(nameof(execute));_canExecute = canExecute;}public bool CanExecute(object parameter){return _canExecute == null || _canExecute();}public void Execute(object parameter){_execute();}public event EventHandler CanExecuteChanged{add { CommandManager.RequerySuggested += value; }remove { CommandManager.RequerySuggested -= value; }}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/2513.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

6个步骤,轻松搞定Linux上web UI自动化测试!

对于web端的UI自动化&#xff0c;相信大家都不会陌生&#xff0c;因为很多小伙伴都做过&#xff0c;或者了解到过&#xff0c;但是小编相信&#xff0c;大多数了解到的都是通过windows系统上进行运行web端的UI自动化&#xff0c;在linux上面很少运行UI自动化或者如何执行自动化…

[论文阅读]Label-Only Membership Inference Attacks

Label-Only Membership Inference Attacks Proceedings of the 38th International Conference on Machine Learning Label-Only Membership Inference Attacks 只使用硬标签就可以判断是否是成员的方法&#xff0c;但是是在机器学习模型上。 通过分析模型在扰动下的预测标…

万宇科技闪耀创新舞台 荣膺潜在独角兽企业殊荣

2024年10月24日&#xff0c;在“2024东北亚(沈阳)人才交流大会暨中国潜在独角兽企业发展大会”上&#xff0c;长城战略咨询重磅发布《GEI中国潜在独角兽企业研究报告2024》&#xff0c;揭示了中国潜在独角兽企业群体的最新发展态势。其中&#xff0c;安徽万宇机械设备科技有限公…

Java Iterator 实现杨辉三角

一、问题描述 杨辉三角定义如下&#xff1a; 1/ \1 1/ \ / \1 2 1/ \ / \ / \1 3 3 1/ \ / \ / \ / \1 4 6 4 1/ \ / \ / \ / \ / \ 1 5 10 10 5 1 把每一行看做一个list&#xff0c;试写一个 Iterator&#xff0c;不断输出下一行的 list&#xf…

解决注册Kaggle出现的“Captcha must be filled out”问题

首先&#xff0c;出现这个问题后&#xff0c;就搜索了一下别的博主的方法。 使用header editor 插件 首先&#xff0c;下载扩建&#xff1a; 然后进行重定向&#xff1a; 管理之后&#xff0c;输入下面的地址&#xff0c;然后下载-保存&#xff1a; 但是&#xff0c;这条显然…

【Python】 select模块详解 所有程序猿必看!!!

要理解select.select模块其实主要就是要理解它的参数, 以及其三个返回值。 select()方法接收并监控3个通信列表&#xff0c; 第一个是所有的输入的data,就是指外部发过来的数据&#xff0c;第2个是监控和接收所有要发出去的data(outgoing data),第3个监控错误信息 在网上一直在…

JavaIO流操作

目录 简介 字节输入流 获取字节输入流 读 关闭输入流 字节输出流 获取字节输出流 写 换行符 刷新 关闭输出流 字符流输入流 获取字符输入流 读 关闭输入流 字符输出流 获取字符输出流 写 换行符 刷新 关闭输出流 简介 IO流分为两大派系&#xff1a; …

大数据之Hadoop集群

Hadoop集群介绍&#xff1f;Hadoop集群的优缺点及应用场景&#xff1f;Hadoop集群搭建&#xff1f;Hadoop架构&#xff1f; Hadoop集群介绍 Hadoop集群是由多台计算机&#xff08;节点&#xff09;组成的一个分布式计算系统&#xff0c;主要用于处理大规模的数据集。以下是对Ha…

项目推荐:指针切换器

小编的inscode部署项目&#xff1a;割绳子游戏。 更多精彩内容见InsCode - 让你的灵感立刻落地~ 介绍一下项目。 引言 在现代用户界面设计中&#xff0c;鼠标指针的样式和行为对用户体验有着重要的影响。传统的鼠标指针样式&#xff08;如箭头、手形、等待图标等&#xff09…

D-ID 推出能模仿用户的头部动作以及实时互动的 AI 头像

D-ID 宣布推出两种新型 AI 头像 — — Express 和 Premium&#xff0c;旨在提升内容创作的灵活性和人性化。这些头像将为企业在营销、销售和客户支持等领域的视频制作提供便利。用户只需少量文本输入和视觉数据&#xff0c;即可生成更自然的商业视频。 Express 头像可以通过约一…

【C++系列】-----------内存管理

c内存管理&#xff08;涉及&#xff1a;数据在内存中的分布、new和delete使用、动态内存管理等&#xff09; 文章目录 c内存管理&#xff08;涉及&#xff1a;数据在内存中的分布、new和delete使用、动态内存管理等&#xff09;前言一、C/C内存分布二、C中动态内存管理2.1、 ne…

SpringBoot框架:作业管理系统构建之道

摘 要 使用旧方法对作业管理信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在作业管理信息的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题。 这次开发的作业管理系统有管…

Linux字体更新 使用中文字体

问题描述&#xff0c;处理之前&#xff0c;中文乱码 处理后的结果 压缩需要上传的字体&#xff1a; 上传到LInux的字体目录&#xff0c;上传后解压出来 刷新字体&#xff1a; fc-cache -fv 测试是否正常 fc-list | grep "FontName"如果还不行 可以在代码里面指定字…

【书生.浦语实战营】——入门岛

【书生.浦语实战营】——入门岛_第一关_Linux基础 任务分布1. 本地vscode远程连接并进行端口映射端口映射What——何为端口映射How——怎么进行端口映射 2. Linux基础命令touch &#xff1a;创建文件mkdir &#xff1a;创建目录cd:进入 退出 目录pwd :确定当前所在目录cat:可以…

VirtualBox 解决虚拟机Cable Unplugged 无法上网问题

问题描述 VirtualBox 中的虚拟机无法上网&#xff0c;在虚拟机中查看网络设置显示 Cable Unplugged。 解决方案 选择VirtualBox 上方任务栏的控制->设置->网络&#xff0c;勾选接入网线即可解决。

win10下MMSegmentation自定义数据集

下载1.2.1版本: Releases open-mmlab/mmsegmentation GitHub 安装环境 本地torch环境为1.9.1 pip install -U openmim mim install mmengine mim install "mmcv>=2.0.0" 报mmcv版本不匹配的问题,形如:MMCV==X.X.X is used but incompatible. Please inst…

CSS网格布局

前言 希望元素按照网格的方式进行布局&#xff0c;最简单的方式就是利用网格布局&#xff0c;如图所示&#xff1a; 网格布局 设置网格布局的核心属性&#xff1a; ① display: grid 设置容器为网格布局容器&#xff08;如果希望设置行内的网格容器&#xff0c;可以设置disp…

童年的玩具:燕麦时钟

也不知道是谁传下来的&#xff0c;燕麦时钟。 燕麦是野生的&#xff0c;通常在麦地里面的都被拔掉&#xff0c;但是土埂上面的还幸存下来。 这个燕麦成熟后&#xff0c;上面有个麦芒由直的变弯&#xff0c;越是90度&#xff0c;越成熟。 选一根90度的成熟麦芒。把下部插入一团…

如何在BSV区块链上实现可验证AI

​​发表时间&#xff1a;2024年10月2日 nChain的顶尖专家们已经找到并成功测试了一种方法&#xff1a;通过区块链技术来验证AI&#xff08;人工智能&#xff09;系统的输出结果。这种方法可以确保AI模型既按照规范运行&#xff0c;避免严重错误&#xff0c;遵守诸如公平、透明…

2024年还有多少人在使用PHP?

根据W3Techs的最新数据&#xff0c;2024年PHP仍然支持76.5%的网站&#xff0c;这一数字在一年内下降不到1%&#xff08;截至2023年为77.3%&#xff09;。 尽管这一数字有所下降&#xff0c;但这表明PHP仍然是Web开发中非常流行的语言。 根据JetBrains的调查&#xff0c;在过去…