zoukankan      html  css  js  c++  java
  • wpf 自定义控件的使用

    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);
  • 相关阅读:
    Java Web连接各种数据库方式汇总
    java.lang.UnsupportedClassVersionError: Bad version number in .class file 解决办法
    <meta 标签的详细使用
    Redis实战之征服 Redis + Jedis + Spring (一)
    Redis实战之征服 Redis + Jedis + Spring (二)
    Redis实战之征服 Redis + Jedis + Spring (三)
    快速组合数
    HDU4632:Palindrome subsequence(区间DP)
    阿里暂停微信服务:让商家回归微信的本职,做好客户服务
    谈谈无穷小微积分对我国微积分教学改革的影响
  • 原文地址:https://www.cnblogs.com/v587yy/p/7423626.html
Copyright © 2011-2022 走看看