• WFP 按钮增加图片背景,并且在按压时切换图片的记录


    1、按钮控件的前台

    <UserControl x:Class="JapanSubway.UserControls.LeftMenuButton"
                 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:JapanSubway.UserControls"
                 mc:Ignorable="d" 
                 d:DesignHeight="50" d:DesignWidth="120" Loaded="UserControl_Loaded">
    
        <UserControl.Resources>
            <ControlTemplate x:Key="buttonTemplate" TargetType="Button">
                <StackPanel Orientation="Vertical">
                    <Image x:Name="img" Stretch="Fill" Source="{Binding CurrentButtonImagePath}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"></Image>
                </StackPanel>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsPressed" Value="True">
                        <Setter TargetName="img" Property="Source" Value="{Binding PressedButtonImagePath}"></Setter>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </UserControl.Resources>
    
        <Grid>
            <Button IsEnabled="{Binding ButtonIsEnable}" x:Name="btn" Background="Transparent" Click="Button_Click" Template="{StaticResource buttonTemplate}"  HorizontalAlignment="Center"  VerticalAlignment="Center" BorderThickness="0"></Button>
        </Grid>
    </UserControl>

    2、按钮控件的后台

        public partial class LeftMenuButton : UserControl
        {
            public LeftMenuButtonViewModel ViewModel { get; set; }
            public int ImageIndex { get; set; }
            public LeftMenuButton()
            {
                ViewModel = new LeftMenuButtonViewModel();
                this.DataContext = ViewModel;
                InitializeComponent();
            }
    
            private void UserControl_Loaded(object sender, RoutedEventArgs e)
            {
                ViewModel.CurrentButtonImagePath = "/Images/LeftMenuButtons/left_menu_1_normal.png";
                ViewModel.PressedButtonImagePath = "/Images/LeftMenuButtons/left_menu_1_pressed.png";
            }
    
            private void Button_Click(object sender, RoutedEventArgs e)
            {
                ViewModel.CurrentButtonImagePath = "/Images/LeftMenuButtons/left_menu_1_selected.png";
                ViewModel.ButtonIsEnable = false;
            }
        }

    3、用到的一个类

        public class LeftMenuButtonViewModel : ViewModelBase
        {
            private string currentButtonImagePath;
            private string pressedButtonImagePath;
            private bool buttonIsEnable;
            public LeftMenuButtonViewModel()
            {
                buttonIsEnable = true;
            }
            /// <summary>
            /// 正在显示的图片的路径
            /// </summary>
            public string CurrentButtonImagePath { get => currentButtonImagePath; set { currentButtonImagePath = value; RaisePropertyChanged(); } }
            /// <summary>
            /// 按压后的图片的路径
            /// </summary>
            public string PressedButtonImagePath { get => pressedButtonImagePath; set { pressedButtonImagePath = value; RaisePropertyChanged(); } }
    
            public bool ButtonIsEnable { get => buttonIsEnable; set { buttonIsEnable = value; RaisePropertyChanged(); } }
        }

    4、补充用到的一个组件

      MvvmLight,用于双向绑定

  • 相关阅读:
    适配器模式(16)
    状态模式(15)
    用反射技术替换工厂种的switch分支(14)
    2017年目标与规划
    抽象工厂模式(13)
    观察者模式(12)
    建造者模式(11)
    TCP 可靠传输与流量控制的实现
    TCP报文段的首部格式
    TCP可靠传输的工作原理
  • 原文地址:https://www.cnblogs.com/wjx-blog/p/15451120.html
Copyright © 2020-2023  润新知