WPF自定义嵌入弹框控件,支持内容标题自定义

这篇具有很好参考价值的文章主要介绍了WPF自定义嵌入弹框控件,支持内容标题自定义。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近为了实现WPF中弹框组件写了一个小例子:

组件要求:

1.自定义标题

2自定义标题颜色

3提供关闭按钮,

4.弹框内容可由调用方自行嵌入

xaml代码

<UserControl x:Class="WpfApp1.Controls.CustomPopup"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:WpfApp1.Controls"
             MouseLeftButtonDown="UserControl_MouseLeftButtonDown"
             MouseLeftButtonUp="UserControl_MouseLeftButtonUp"
             MouseMove="UserControl_MouseMove" Height="142" Width="112">
    <UserControl.Resources>
        <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
    </UserControl.Resources>
    <Border Background="White" BorderBrush="Black" BorderThickness="1">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition/>
            </Grid.RowDefinitions>

            <!-- 标题栏 -->
            <Border Grid.Row="0" Background="{Binding TitleBackground, RelativeSource={RelativeSource AncestorType={x:Type local:CustomPopup}}}">
                <DockPanel>
                    <TextBlock Text="{Binding Title, RelativeSource={RelativeSource AncestorType={x:Type local:CustomPopup}}}"
                               Foreground="White" FontWeight="Bold" Margin="5" Width="46"/>
                    <Button x:Name="CloseButton" Content="X" DockPanel.Dock="Right" Margin="5" Click="CloseButton_Click"
                            Visibility="{Binding ShowCloseButton, RelativeSource={RelativeSource AncestorType={x:Type local:CustomPopup}}, Converter={StaticResource BooleanToVisibilityConverter}}" Width="30" Height="25" HorizontalAlignment="Right"/>
                </DockPanel>
            </Border>

            <!-- 内容区域 -->
            <ContentPresenter Grid.Row="1" Content="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:CustomPopup}}, Path=Content}"/>

        </Grid>
    </Border>
</UserControl>
 

cs代码

using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using WpfApp1.Models;

namespace WpfApp1.Controls
{
    public partial class CustomPopup : UserControl
    {
        private bool isDragging;
        private Point offset;

        public CustomPopup()
        {
            InitializeComponent();
        }

        private void UserControl_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            isDragging = true;
            offset = e.GetPosition(this);
            CaptureMouse();
            // 设置当前弹框的 Panel.ZIndex 为最高值
            GlobalSetting.CurrentPageIndex++;
            Panel.SetZIndex(this, GlobalSetting.CurrentPageIndex);
        }

        private void UserControl_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            isDragging = false;
            ReleaseMouseCapture();
        }

        private void UserControl_MouseMove(object sender, MouseEventArgs e)
        {
            if (isDragging)
            {
                var parent = VisualTreeHelper.GetParent(this) as UIElement;
                if (parent != null)
                {
                    Point mousePos = e.GetPosition(parent);
                    double newX = mousePos.X - offset.X;
                    double newY = mousePos.Y - offset.Y;
                    Canvas.SetLeft(this, newX);
                    Canvas.SetTop(this, newY);
                }
            }
        }

        private void CloseButton_Click(object sender, RoutedEventArgs e)
        {
            var parent = VisualTreeHelper.GetParent(this);
            if (parent is Panel panel)
            {
                panel.Children.Remove(this);
            }
        }
        public static  DependencyProperty TitleProperty =
                DependencyProperty.Register("Title", typeof(string), typeof(CustomPopup));

        public static  DependencyProperty TitleBackgroundProperty =
            DependencyProperty.Register("TitleBackground", typeof(Brush), typeof(CustomPopup));

        public static  DependencyProperty ShowCloseButtonProperty =
            DependencyProperty.Register("ShowCloseButton", typeof(bool), typeof(CustomPopup));
        public static  DependencyProperty ContentProperty =
           DependencyProperty.Register("Content", typeof(object), typeof(CustomPopup));

        public string Title
        {
            get { return (string)GetValue(TitleProperty); }
            set { SetValue(TitleProperty, value); }
        }

        public Brush TitleBackground
        {
            get { return (Brush)GetValue(TitleBackgroundProperty); }
            set { SetValue(TitleBackgroundProperty, value); }
        }

        public bool ShowCloseButton
        {
            get { return (bool)GetValue(ShowCloseButtonProperty); }
            set { SetValue(ShowCloseButtonProperty, value); }
        }

        public object Content
        {
            get { return GetValue(ContentProperty); }
            set { SetValue(ContentProperty, value); }
        }

    }
}
 

其他页面调用时

   <Canvas Margin="0,125,0,0"  x:Name="mainBody">
            <Controls:CustomPopup Width="416" Height="200" Title="Custom Popup" TitleBackground="LightBlue" ShowCloseButton="True" Canvas.Left="199" Canvas.Top="224" HorizontalAlignment="Left" VerticalAlignment="Top">
                <Controls:CustomPopup.Content>
                    <!-- 自定义弹框组件的内容区域 -->
                    <StackPanel>
                        <TextBlock Text="This is the custom content!" FontSize="20" HorizontalAlignment="Center"/>
                        <Button Content="Click me!" Width="100" Height="30" HorizontalAlignment="Center" Margin="10"/>
                    </StackPanel>
                </Controls:CustomPopup.Content>
            </Controls:CustomPopup>
      
        </Canvas>文章来源地址https://www.toymoban.com/news/detail-565565.html

到了这里,关于WPF自定义嵌入弹框控件,支持内容标题自定义的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • WPF中嵌入web网页控件 WebBrowser

    1  WebBrowser特点 font color=blueWebBrowser控件内部使用IE的引擎,因此使用WebBrowser我们必须安装IE浏览器。 WebBrowser使用的是IE内核,许多H5新特性都不支持,然后使用谷歌内核和火狐内核会使软件的体积增加至几十MB。 font color=greenWebBrowser 控件为 WebBrowser ActiveX 控件提供了托管包装

    2024年02月09日
    浏览(49)
  • uniapp 微信小程序 uni.modal弹框+content内容自定义(内容换行)

    效果图: 1、template 2、data 3、methods

    2024年02月16日
    浏览(50)
  • WPF应用开发之控件动态内容展示

    在我们开发一些复杂信息的时候,由于需要动态展示一些相关信息,因此我们需要考虑一些控件内容的动态展示,可以通过动态构建控件的方式进行显示,如动态选项卡展示不同的信息,或者动态展示一个自定义控件的内容等等,目的就是能够减少一些硬编码的处理方式,以

    2024年02月05日
    浏览(63)
  • MAUI 框架开发 将 MAUI 嵌入到 WPF 控件里

    本文将介绍如何将 MAUI 的底层替换为 WPF 框架层,且将 MAUI 的内容嵌入到 WPF 的一个控件里面,无 UI 框架嵌入的空域问题 本文是 MAUI 框架开发博客,而不是 MAUI 应用开发博客,本文更多介绍的是进行 MAUI 这个框架的开发内容。不熟悉或不进行 MAUI 框架开发的伙伴也可以看着玩

    2024年02月17日
    浏览(46)
  • WPF中用户控件和自定义控件

    无论是在WPF中还是WinForm中,都有用户控件(UserControl)和自定义控件(CustomControl),这两种控件都是对已有控件的封装,实现功能重用。但是两者还是有一些区别,本文对这两种控件进行讲解。 用户控件 注重复合控件的使用,也就是多个现有控件组成一个可复用的控件组

    2024年01月21日
    浏览(41)
  • WPF自定义按钮控件

    在平时的WPF应用中,系统提供的按钮控件确实可以实现正常的逻辑,但是从视觉方面看的话,确实不够美观,而且每个项目的UI设计不尽相同。那么自定义按钮控件就是必须的了,网上查找了很多自定义按钮控件的办法,但每次都是写到一半就报错。在参考了多个技术贴之后

    2024年02月08日
    浏览(45)
  • WPF自定义控件

    方式一:基于现有控件进行扩展,如基于button进行扩展,UI可直接用xmal进行编辑设计,逻辑用xaml.cs进行编辑 方法二:直接创建wpf自定义控件 本文用方法二开展自定义控件!!! 1.自定义控件的内容在代码cs文件中,自定义控件继承自Control,ui界面可在Genric.xaml中定义。 2.在

    2024年02月11日
    浏览(37)
  • wpf 自定义combox控件

    关键步骤 1、新建usercontrol使用基本的控件进行设计 2、依赖属性的定义,目的:外部调用时候能够使用属性进行控件样式的控制 例如 Width=\\\"200\\\" DisplayMemberPath=\\\"Name\\\" SelectedItem=\\\"{Binding SelectedItem,Mode=TwoWay}\\\" SelectionChanged=\\\"{Binding ProjectSelectCommand}\\\" CommandParameter=\\\"{Binding ElementName = Projec

    2024年02月09日
    浏览(41)
  • WPF嵌入外部exe应用程序-使用Winfom控件承载外部程序

    首先要解决在WPF中如何使用Winfom控件的问题,官方对此有支持的方式。 在引用管理器中添加winfrom相关的程序集 System.Windows.Forms 和 WindowsFormsIntegration 。 然后使用winform的控件,得在外面套一层WindowsFormsHost(好像添加了WindowsFormsIntegration,不使用wfi:也能使用) 这样就可以在WPF中使

    2024年02月17日
    浏览(66)
  • wpf自定义控件-单/双箭头线

    using System; using System.ComponentModel; using System.Windows; using System.Windows.Controls; using System.Windows.Media; using System.Windows.Shapes; namespace CustomControls { [TypeDescriptionProvider(typeof(CustomTypeDescriptionProvider))] public class CustomArrow : Shape { public CustomArrow () { Stroke= new SolidColorBrush(Color.FromRgb(0, 140, 206));

    2024年02月15日
    浏览(38)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包