WPF 如何自定义一个弹框

 

------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------

 

简述

  手工以原生Grid的方式,自定义了一个仿弹窗效果,优点可以自定义,缺点需要自己实现以及维护整个弹窗的效果 

效果图

  

思路

  直接画好页面,控制它的展示消失即可

代码

  1.xaml的弹框,下面的按钮是自定义的样式

<!--确认xlsx的模态框自定义ConfirmedModalBox-->
        <Border x:Name="incConfirmedModalBox"  Grid.Column="1" Margin="-160,-80,30,10"  Width="430" Height="500"  BorderBrush="#000" BorderThickness="1" Background="White" Visibility="Collapsed">
            <!--Margin="6,6,6,6"-->
            <Grid Width="430" Height="500" Background="White" >
                <Grid.RowDefinitions>
                    <RowDefinition Height="40"/>
                    <RowDefinition />
                    <RowDefinition Height="70"/>
                </Grid.RowDefinitions>
                <Grid Grid.Row="0">
                    <!-- Background="Aqua"-->
                    <TextBlock Margin="30,15,0,0">请确认</TextBlock>
                </Grid>
                <Grid Grid.Row="1">
                    <Grid >
                        <ScrollViewer Margin="30,0,0,0" VerticalScrollBarVisibility="Auto" >
                            <!--VerticalScrollBarVisibility="Auto"-->
                            <StackPanel Margin="0,0,0,0" HorizontalAlignment="Left"  VerticalAlignment="Stretch" x:Name="incModalStackPane1" >
                                <!--<Grid Width="400" Height="22">
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="*"></ColumnDefinition>
                                        <ColumnDefinition Width="*"></ColumnDefinition>
                                    </Grid.ColumnDefinitions>
                                    <TextBlock Grid.Column="0" Margin="0 5">test1.inc</TextBlock>
                                    <TextBlock Grid.Column="1"  Margin="0 5">2018-08-11 23:11:13</TextBlock>
                                </Grid>
                                <Grid Width="400" Height="22">
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="*"></ColumnDefinition>
                                        <ColumnDefinition Width="*"></ColumnDefinition>
                                    </Grid.ColumnDefinitions>
                                    <TextBlock Grid.Column="0" Margin="0 5">test1.inc</TextBlock>
                                    <TextBlock Grid.Column="1" Margin="0 5">2018-08-11 23:11:13</TextBlock>
                                </Grid>-->
                            </StackPanel>
                        </ScrollViewer>
                    </Grid>
                </Grid>
                <Grid Grid.Row="2">
                    <!-- Background="Aqua"-->
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*"></ColumnDefinition>
                        <ColumnDefinition Width="*"></ColumnDefinition>
                    </Grid.ColumnDefinitions>
                    <Button Grid.Column="0" Style="{StaticResource ButtonStyle}" x:Name="incModalConfirm"  Content="确定" HorizontalAlignment="Left" Margin="95,15,0,0" VerticalAlignment="Top"  Width="90" Height="26"  PreviewMouseLeftButtonUp="incModalConfirm_PreviewMouseLeftButtonUp">
                        <Button.Template>
                            <ControlTemplate TargetType="{x:Type Button}">
                                <Border BorderBrush="{TemplateBinding Control.BorderBrush}" BorderThickness="0" CornerRadius="6,6,6,6" Name="PART_Background">
                                    <Border.Background>
                                        <LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
                                            <GradientStop Color="#FF006BB9"  />
                                            <GradientStop Color="#006AB9"  />
                                        </LinearGradientBrush>
                                    </Border.Background>
                                    <ContentPresenter Content="{TemplateBinding ContentControl.Content}" HorizontalAlignment="Center" VerticalAlignment="Center" />
                                </Border>
                            </ControlTemplate>
                        </Button.Template>
                    </Button>
                    <Button Grid.Column="1"  Style="{StaticResource ButtonStyle}" x:Name="incModalCancel"  Content="取消" HorizontalAlignment="Left" Margin="30,15,0,0" VerticalAlignment="Top"  Width="90" Height="26"  PreviewMouseLeftButtonUp="incModalCancel_PreviewMouseLeftButtonUp">
                        <Button.Template>
                            <ControlTemplate TargetType="{x:Type Button}">
                                <Border BorderBrush="{TemplateBinding Control.BorderBrush}" BorderThickness="0" CornerRadius="6,6,6,6" Name="PART_Background">
                                    <Border.Background>
                                        <LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
                                            <GradientStop Color="#FF006BB9"  />
                                            <GradientStop Color="#006AB9"  />
                                        </LinearGradientBrush>

                                    </Border.Background>
                                    <ContentPresenter Content="{TemplateBinding ContentControl.Content}" HorizontalAlignment="Center" VerticalAlignment="Center" />
                                </Border>
                            </ControlTemplate>
                        </Button.Template>
                    </Button>
                </Grid>
            </Grid>
        </Border>
xaml

   2.cs后端的控制

 incConfirmedModalBox.Visibility = Visibility.Visible;

  3.业务代码就不做展示了,就是把此控件放到xaml末尾,根据Grid布局定位到页面中间,控制它展示隐藏即可,他们确定取消按钮正常调用后台逻辑代码即可,调用完成之后将incConfirmeDModalBox隐藏,维护关联逻辑

 

 

 

备注

  本来这块想要讲很多的,但是涉及到没有准备现成的Demo,之前编写的业务不便公开,草草收尾了,下次重新补上一份

转载于:https://www.cnblogs.com/DawnCHENXI/p/10478974.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的WPF自定义下拉框控件的实现: 1. 创建一个新的WPF控件项目,命名为“CustomComboBox”。 2. 在项目中添加一个新的类,命名为“CustomComboBox.cs”,在类中添加以下代码: ``` using System.Windows; using System.Windows.Controls; namespace CustomComboBox { public class CustomComboBox : ComboBox { static CustomComboBox() { DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomComboBox), new FrameworkPropertyMetadata(typeof(CustomComboBox))); } } } ``` 这里我们继承了WPF内置的`ComboBox`控件,并重写了`DefaultStyleKeyProperty`属性,这是自定义控件的必要步骤之一。 3. 在项目中添加一个新的资源字典,命名为“Generic.xaml”,并添加以下代码: ``` <Style TargetType="{x:Type local:CustomComboBox}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type local:CustomComboBox}"> <Grid> <ToggleButton x:Name="PART_ToggleButton" Grid.Column="2" Focusable="false" IsChecked="{Binding Path=IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" ClickMode="Press"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition /> <ColumnDefinition Width="20" /> </Grid.ColumnDefinitions> <Border x:Name="Border" Grid.ColumnSpan="2" CornerRadius="0" Background="White" BorderBrush="Black" BorderThickness="1" /> <Path x:Name="Arrow" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" Data="M 0 0 L 4 4 L 8 0 Z" /> </Grid> </ToggleButton> <Popup x:Name="PART_Popup" Placement="Bottom" IsOpen="{TemplateBinding IsDropDownOpen}" AllowsTransparency="True" Focusable="False" PopupAnimation="Slide"> <Border x:Name="PopupBorder" Background="White" BorderBrush="Black" BorderThickness="1" CornerRadius="0"> <ScrollViewer x:Name="ScrollViewer" SnapsToDevicePixels="True"> <StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Contained" /> </ScrollViewer> </Border> </Popup> </Grid> <ControlTemplate.Triggers> <Trigger Property="IsEnabled" Value="False"> <Setter Property="Foreground" Value="#888888" /> </Trigger> <Trigger Property="IsGrouping" Value="True"> <Setter Property="ScrollViewer.CanContentScroll" Value="False" /> </Trigger> <Trigger SourceName="PopupBorder" Property="BorderThickness" Value="0"> <Setter TargetName="Border" Property="Margin" Value="0" /> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> ``` 这里定义了一个名为“CustomComboBox”的样式,它继承自WPF内置的`ComboBox`样式,并在其中添加了一个`ToggleButton`控件,用于展开/收起下拉框,以及一个`Popup`控件,用于显示下拉框中的内容。 4. 在项目中添加一个新的XAML文件,命名为“MainWindow.xaml”,并添加以下代码: ``` <Window x:Class="CustomComboBox.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:CustomComboBox" Title="MainWindow" Height="350" Width="525"> <Grid> <local:CustomComboBox Width="150" Height="30"> <ComboBoxItem>Item 1</ComboBoxItem> <ComboBoxItem>Item 2</ComboBoxItem> <ComboBoxItem>Item 3</ComboBoxItem> </local:CustomComboBox> </Grid> </Window> ``` 这里我们在窗口中添加了一个自定义下拉框控件,并在其中添加了三个选项。 5. 运行程序,你将看到一个自定义的下拉框控件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值