精华内容
下载资源
问答
  • wpf自定义控件使用自定义事件 1 创建自定义控件及自定义事件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31...

    wpf自定义控件中使用自定义事件

    1 创建自定义控件及自定义事件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
        /// <summary>
        /// 演示用的自定义控件
        /// </summary>
        public class ExtButton : Button
        {
            public ExtButton()
            {
                base.Click += ExtButton_Click;
            }
     
            private void ExtButton_Click(object sender, RoutedEventArgs e)
            {
                //定义传递参数
                // RoutedPropertyChangedEventArgs<Object> args = new RoutedPropertyChangedEventArgs<Object>("1", "2", ControlLoadOverEvent);
                RoutedEventArgs args2 = new RoutedEventArgs(ControlLoadOverEvent, this);
                //引用自定义路由事件
                this.RaiseEvent(args2);
     
            }
            /// <summary>
            /// 声明路由事件
            /// 参数:要注册的路由事件名称,路由事件的路由策略,事件处理程序的委托类型(可自定义),路由事件的所有者类类型
            /// </summary>
            public static readonly RoutedEvent ControlLoadOverEvent = EventManager.RegisterRoutedEvent("ControlLoadOverEvent", RoutingStrategy.Bubble, typeof(RoutedPropertyChangedEventArgs<Object>), typeof(ExtButton));
            /// <summary>
            /// 处理各种路由事件的方法 
            /// </summary>
            public event RoutedEventHandler ControlLoadOver
            {
                //将路由事件添加路由事件处理程序
                add { AddHandler(ControlLoadOverEvent, value); }
                //从路由事件处理程序中移除路由事件
                remove { RemoveHandler(ControlLoadOverEvent, value); }
            }
     
        }

     

    2 使用并绑定自定义控件的事件

    1
    2
    3
    4
    5
    6
    7
    8
                <!--i为System.Windows.Interactivity引用-->
                <ext:ExtButton x:Name="extButton" Content="绑定自定义事件" HorizontalAlignment="Left" Margin="123,10,0,0" VerticalAlignment="Top" Width="95">
                    <i:Interaction.Triggers>
                        <i:EventTrigger EventName="ControlLoadOver">
                            <i:InvokeCommandAction Command="{Binding ButtonLoadOverCommand}" CommandParameter="{Binding ElementName=extButton}"></i:InvokeCommandAction>
                        </i:EventTrigger>
                    </i:Interaction.Triggers>
                </ext:ExtButton>

     

    3 触发自定义事件后的操作

    方式1

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            public DelegateCommand<Object> ButtonLoadOverCommand { getset; }
            public void ButtonLoadOver(Object obj)
            {
                //这里的参数为自定义控件对象
                ExtButton btn = obj as ExtButton;
                if (btn != null)
                {
                    var content = btn.Content;
                }
            }

    方式2

    1
    2
    3
    4
    5
    6
    7
            this.extButton.ControlLoadOver += ExtButton_ControlLoadOver;
     
            private void ExtButton_ControlLoadOver(object sender, RoutedEventArgs e)
            {
                var btn = (Button)e.Source;
                var str = btn.Content;
            }

     

    转载于:https://www.cnblogs.com/robertyao/p/7447315.html

    展开全文
  • WPF自定义控件 使用阿里巴巴图标 原文:WPF自定义控件 使用阿里巴巴图标 上一篇介绍了WPF自定义控件 按钮的初步使用,在进一步介绍WPF自定义控件 按钮之前,先介绍一下如何...
    原文:WPF自定义控件 使用阿里巴巴图标

    上一篇介绍了 WPF自定义控件 按钮 的初步使用,在进一步介绍WPF自定义控件 按钮之前,先介绍一下如何在WPF项目中使用阿里巴巴图标,方便以后做示例。

    1.还是在上一篇项目基础上,在WPF自定义控件类库项目 Controls 文件夹下,新建一个资源字典(WPF)文件,取名: MyIcon.xaml ,并且添加如下代码:

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                        xmlns:local="clr-namespace:WpfCustomControlLibrary.Controls">
        
        <Style x:Key="MyIcon" TargetType="TextBlock">
            <Setter Property="FontFamily" Value="/WpfCustomControlLibrary;component/Resources/#iconfont"></Setter>
            <Setter Property="Foreground" Value="White"/>
            <Setter Property="TextAlignment" Value="Center"/>
            <Setter Property="HorizontalAlignment" Value="Center"/>
            <Setter Property="VerticalAlignment" Value="Center"/>
            <Setter Property="FontSize" Value="20"/>
        </Style>
        
    </ResourceDictionary>

    2.在项目下新建一个 Resources 文件夹,去阿里巴巴图标网站  http://www.iconfont.cn/ 下载 ttf 文件,放到该文件夹下,注意将此ttf文件的生成操作设置成 Resource ;


    3.在Generic.xaml文件中,添加对MyIcon.xaml的引用:

    <ResourceDictionary
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfCustomControlLibrary">
    
        <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="pack://application:,,,/WpfCustomControlLibrary;component/Controls/MyButton1.xaml"/>
                <ResourceDictionary Source="pack://application:,,,/WpfCustomControlLibrary;component/Controls/MyIcon.xaml" />
        </ResourceDictionary.MergedDictionaries>
    
    
    </ResourceDictionary>


    4.在测试项目的 app.xaml 文件中加入MyIcon.xaml的引用:

    <Application x:Class="WpfApplication1.App"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:local="clr-namespace:WpfApplication1"
                 StartupUri="MainWindow.xaml">
        <Application.Resources>
            <ResourceDictionary>
                <ResourceDictionary.MergedDictionaries>
                    <ResourceDictionary Source="pack://application:,,,/WpfCustomControlLibrary;component/Controls/MyIcon.xaml"/>
                </ResourceDictionary.MergedDictionaries>
            </ResourceDictionary>
        </Application.Resources>
    
    </Application>


    5.在测试项目中加入一个textblock用以测试:

    <Window x:Class="WpfApplication1.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:WpfApplication1"
            xmlns:controls="clr-namespace:WpfCustomControlLibrary.Controls;assembly=WpfCustomControlLibrary"
            mc:Ignorable="d"
            Title="MainWindow" Height="350" Width="525">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition></RowDefinition>
                <RowDefinition></RowDefinition>
                <RowDefinition></RowDefinition>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition></ColumnDefinition>
                <ColumnDefinition></ColumnDefinition>
            </Grid.ColumnDefinitions>
            <Button Grid.Row="0" Grid.Column="0" Content="Default Button" Width="100" Height="50"></Button>
            <controls:MyButton1  Grid.Row="0" Grid.Column="1" Width="80" Height="80" >
                <controls:MyButton1.Content>
                    <TextBlock Text="MyButton1" Margin="10,30,10,10"></TextBlock>
                </controls:MyButton1.Content>
            </controls:MyButton1>
    
            <TextBlock Grid.Row="1" Grid.Column="0" Text="&#xe6f0;" FontSize="50" Foreground="Green" Style="{StaticResource MyIcon}" ></TextBlock>
    
        </Grid>
    </Window>
    

    最终效果就是显示一个微信图标:


    将这个icon图标和上一篇介绍的 MyButton1 结合起来使用,可以达到 图标按钮的效果,如:

    1)将 MyButton1.xaml 改成:

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                        xmlns:local="clr-namespace:WpfCustomControlLibrary.Controls">
    
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/WpfCustomControlLibrary;component/Controls/MyIcon.xaml" />
        </ResourceDictionary.MergedDictionaries>
    
    
        <ControlTemplate x:Key="MyButton1_Template" TargetType="{x:Type local:MyButton1}">
            <Border x:Name="border" Background="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path= Background}" 
                                        Height="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=Height}" 
                                        CornerRadius="2" 
                                        BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}"
                                        Width="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=Width}">
                <!--Icon/Text-->
                <StackPanel Orientation="Horizontal" VerticalAlignment="Center" 
                            Margin="{TemplateBinding Padding}"
                            HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}">
                    <TextBlock x:Name="icon"  Margin="3" 
                               RenderTransformOrigin="0.5,0.5" Style="{StaticResource MyIcon}"
                               Text="&#xe6f0;"
                               FontSize="30" 
                               Foreground="Green">
                        <TextBlock.RenderTransform>
                            <RotateTransform x:Name="transIcon" Angle="0"/>
                        </TextBlock.RenderTransform>
                    </TextBlock>
    
                    <TextBlock VerticalAlignment="Center"  x:Name="txt" 
                               TextDecorations="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=ContentDecorations}" 
                                                   Text="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=Content}" />
                </StackPanel>
            </Border>
        </ControlTemplate>
    
        <Style TargetType="{x:Type local:MyButton1}">
            <Setter Property="Template" Value="{StaticResource MyButton1_Template}"/>
        </Style>
        
    </ResourceDictionary>

    2)测试代码改成:

    <Window x:Class="WpfApplication1.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:WpfApplication1"
            xmlns:controls="clr-namespace:WpfCustomControlLibrary.Controls;assembly=WpfCustomControlLibrary"
            mc:Ignorable="d"
            Title="MainWindow" Height="350" Width="525">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition></RowDefinition>
                <RowDefinition></RowDefinition>
                <RowDefinition></RowDefinition>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition></ColumnDefinition>
                <ColumnDefinition></ColumnDefinition>
            </Grid.ColumnDefinitions>
            <Button Grid.Row="0" Grid.Column="0" Content="Default Button" Width="100" Height="50"></Button>
            <controls:MyButton1  Grid.Row="0" Grid.Column="1" Width="100" Height="50" Content="MyButton1" Background="Orange" />
            <TextBlock Grid.Row="1" Grid.Column="0" Text="&#xe6f0;" FontSize="50" Foreground="Green" Style="{StaticResource MyIcon}" ></TextBlock>
    
        </Grid>
    </Window>
    

    那么 按钮将变成图标+文字的组合,如图:





    posted on 2018-08-30 14:51 NET未来之路 阅读(...) 评论(...) 编辑 收藏

    转载于:https://www.cnblogs.com/lonelyxmas/p/9560163.html

    展开全文
  • WPF自定义控件,UserControl的制作与使用过程,这个例子采用了详细而且简介的方式讲述了WPF自定义控件的制作及调用的全过程,他适合初学者没制作过又想使用WPF自定义控件的程序员。
  • WPF 自定义控件创建及使用教程

    千次阅读 2020-02-02 22:11:53
    步骤一:新建WPF应用添加WPF自定义控件,添加后会有Themes文件夹和customControl的cs 文件 2、按照cs文件中的步骤使用自定义控件 这就是最简单的自定义控件,调试后发现什么都没有 第二部分,修改自定义...

    1、WPF自定义控件的创建

    自定义控件比较灵活,按照教程学习比较简单

    步骤一:新建WPF应用并添加WPF自定义控件,添加后会有Themes文件夹和customControl的cs 文件

     

    2、按照cs文件中的步骤使用自定义控件

    这就是最简单的自定义控件,调试后发现什么都没有

    第二部分,修改自定义控件中的内容

    如果要控件中有内容,则必须修改Generic中的内容,例如增加一个textbox和button

    可以修改自定义控件的属性

     

     

    第三部分,其他项目怎么使用自定义控件

    和当前项目中相当只是需要添加项目的引用,可以把自定义控件的exe改为dll,因为assembly中没有定义后缀

     

    第四部分WPF自定义控件的模板样式设置

    可以通过generic.xaml的template 设置自定义控件的样式

     

    最后,WPF自定义控件的公开属性

    第一步:

     

    第二步:

     

    第三步:

     

    展开全文
  • WPF 自定义控件样式

    2019-01-21 16:07:48
    自己写的一些WPF自定义控件样式,有TabControl,Button,ComboBox等,新手入门学习不错。
  • wpf 自定义控件使用

    千次阅读 2017-08-25 15:25:21
    wpf程序中使用自定义控件   新建用户控件   写一个带有图片的button      这是两个自定义按钮 添加可以点击 修改不可以点击 来自同一个自定义控件    xmlns=...
    wpf程序中使用自定义控件
     
    新建用户控件
     
    写一个带有图片的button 
     
     
    这是两个自定义按钮 添加可以点击  修改不可以点击 来自同一个自定义控件
     
    <UserControl x:Class="WpfSop.Lib.Controls.IconButton"
                 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:WpfSop.Lib.Controls"
                 mc:Ignorable="d"
                 x:Name="iconButton"
                 d:DesignHeight="100" d:DesignWidth="400">
        <Grid>
            <Image x:Name="imageEnable" Grid.ColumnSpan="2" Source="../Images/btn_enable.png" Stretch="Fill"/>
            <Image x:Name="imageDisable" Grid.ColumnSpan="2" Source="../Images/btn_disable.png" Stretch="Fill" Visibility="Collapsed"/>
            <Button IsEnabled="{Binding Path=IsEnabled,ElementName=iconButton}" Click="Button_Click">
                <Button.Template>
                    <ControlTemplate>
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="{Binding Path=ActualHeight,ElementName=iconButton}"/>
                                <ColumnDefinition Width="1*"/>
                            </Grid.ColumnDefinitions>
                            <Image Margin="8" Source="{Binding Path=Icon,ElementName=iconButton}"/>
                            <TextBlock Grid.Column="1" Margin="-16,0,0,0" VerticalAlignment="Center"  HorizontalAlignment="Center"
                                FontSize="{Binding Path=FontSize,ElementName=iconButton}" Foreground="{Binding Path=Foreground,ElementName=iconButton}" Text="{Binding Path=Text,ElementName=iconButton}"/>
                        </Grid>
                    </ControlTemplate>
                </Button.Template>
            </Button>
        </Grid>
    </UserControl>
     
     
    设置背景图片 可以拉伸Stretch="Fill"
    grid里面自定义button样式
    给这个button绑定样式 用binding
    比如里面有个textblock 的text    
    Text="{Binding Path=Text,ElementName=iconButton}"
    path绑定后台自定义属性
    ElementName绑定这个UserControl的x:name
     
    cs文件
    public string Text
            {
                get { return (string)GetValue(TextTextProperty); }
                set
                {
                    SetValue(TextTextProperty, value);
                   // IconButton_SizeChanged(10);//一个方法自动调整文本字体大小
                }
            }
            public static readonly DependencyProperty TextTextProperty =
             DependencyProperty.Register("Text", typeof(string), typeof(IconButton));
     
     
     
     
     
    自动调整文字大小的方法
    /// <summary>
            /// 自动调整字字体大小比例
            /// </summary>
            public double AutoFontSizeRate
            {
                get { return (double)GetValue(AutoFontSizeRateProperty); }
                set { SetValue(AutoFontSizeRateProperty, value); }
            }
            public static readonly DependencyProperty AutoFontSizeRateProperty =
              DependencyProperty.Register("AutoFontSizeRate", typeof(double), typeof(IconButton), new PropertyMetadata(0.4));
    第一个十这个属性名字   第二项为属性   第三项为所属的类  第四项为默认选项
     
     
    下面这个是设置图片的属性 默认选项可以为空 暂时还不知道怎么填默认选项
    /// <summary>
            /// 按钮图标
            /// </summary>
            public ImageSource Icon
            {
                get { return (ImageSource)GetValue(IconProperty); }
                set
                {
                    if (null == value) value = new BitmapImage(new Uri("/WpfSop.Lib;component/Images/btn_disable.png", UriKind.RelativeOrAbsolute));
                    SetValue(IconProperty, value);
                }
            }
            public static readonly DependencyProperty IconProperty = DependencyProperty.Register("Icon", typeof(ImageSource), typeof(IconButton), null);
     
     
     
     
    private async void IconButton_SizeChanged(int delay = 0)
            {
                try
                {
                    if (AutoFontSize)
                    {
                        if (delay > 0)
                        {
                            await Task.Delay(delay);
                        }
                    }
     
                    double FontSize = 0;
                    FontSize = ActualHeight * AutoFontSizeRate;
                    // 文本宽高比大于外框宽高比
                    if (iconButton.ActualWidth * ActualHeight > ActualWidth * iconButton.ActualHeight)
                    {
                        FontSize = AutoFontSizeRate * ActualWidth * iconButton.ActualHeight / iconButton.ActualWidth;
                    }
                    if (FontSize > 0)
                    {
                        iconButton.FontSize = FontSize;
                    }
                }
                catch { }
            }
     
    async 异步的
     
    int delay=0  默认等于0  调用方法的时候在填个int类型的数字
    await Task.Delay(delay);让程序等待几秒钟再执行
     
    自定义button传递点击事件
    自定义一个公共变量 public event EventHandler<RoutedEventArgs> Click = null;
    在button的点击事件里 Click?.Invoke(sender, e);
    展开全文
  • 原文:WPF自定义控件(四)の自定义控件在实际工作中,WPF提供的控件不能完全满足不同的设计需求。这时,需要我们设计自定义控件。 这里LZ总结一些自己的思路,特性如下: Coupling UITemplate Behaviour ...
  • WPF自定义控件创建

    2021-04-08 06:22:24
    WPF自定义控件创建 本文简单的介绍一下WPF自定义控件的开发。 首先,我们打开VisualStudio创建一个WPF自定义控件库,如下图: 然后,我们可以看到创建的解决方案如下: 在解决方案中,我们看到了一个Themes文件夹...
  • 从国外开源网站上找到的效果非常好的WPF自定义控件。切换开关控件(WpfToggleSwitch)。
  • WPF 自定义控件

    2021-05-14 11:07:51
    参考以下系列教程 《WPF自定义控件与样式》
  • wpf自定义控件库,包含列表,按钮,文本框,滚动条,进度条,消息窗体,气泡组件等多种自定义控件样式。
  • [WPF自定义控件库]使用WindowChrome自定义RibbonWindow 原文:[WPF自定义控件库]使用WindowChrome自定义RibbonWindow1. 为什么要自定义RibbonWindow 自定义Window有可能是设计或功能上的要求,可以...
  • [WPF自定义控件]从ContentControl开始入门自定义控件 原文:[WPF自定义控件]从ContentControl开始入门自定义控件1. 前言 我去年写过一个在UWP自定义控件的系列博客,大部分的经验都可以用在WPF中...
  • wpf自定义控件demo

    2019-01-22 20:28:25
    自定义控件,日期,滚动条,按钮,列表 自定义控件,日期,滚动条,按钮,列表
  • WPF自定义控件

    2008-07-21 20:01:36
    学习wpf自定义控件的绝好源码。
  • [WPF自定义控件库] 自定义控件的代码如何与ControlTemplate交互 原文:[WPF自定义控件库] 自定义控件的代码如何与ControlTemplate交互1. 前言 WPF有一个灵活的UI框架,用户可以轻松地使用代码控制控件...
  • 如何使用Expression Blend和Visual Studio创建WPF自定义控件
  • WPF自定义控件

    2020-01-16 11:55:03
    WPF自定义控件集CustomControl动态库说明控件集(CustomComponent)常用控件样式视图集公共方法沟通与交流 CustomControl动态库说明 这是一个自定义控件和视图,还有控件样式和方法集合的动态库(CustomControl),...
  • 接触WPF也有两个多月了,有了一定的理论基础和项目经验,现在打算写一个系列,做出来一个WPF的控件...下面这篇文章主要给大家介绍了关于WPF自定义控件和样式之自定义按钮(Button)的相关资料,需要的朋友可以参考下。
  • WPF 自定义控件的坑(蠢的:自定义控件内容不显示) 原文:WPF 自定义控件的坑(蠢的:自定义控件内容不显示) 版权声明:本文为博主原创文章,未经博主允许不得转载。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,106
精华内容 6,042
关键字:

wpf自定义控件并使用