首页 > 其他分享 >WPF开发快速入门【3】WPF的基本特性(附加属性)

WPF开发快速入门【3】WPF的基本特性(附加属性)

时间:2022-08-23 16:44:28浏览次数:95  
标签:入门 void 附加 bool WPF TextBox public 属性

概述

本文描述WPF的附加属性。对于使用MVVM框架的项目,附加属性是非常重要的一个特性。

 

在MVVM框架下,ViewModel的代码通过控件的依赖属性来控制控件的,例如:

//ViewModel
public Visibility GridVisibility {get;set}

public void Show()
{
      GridVisibility = Visibility.Visible;
}

public void Hide()
{
      GridVisibility = Visibility.Collapsed;
}

//View
<Grid Visibility="{Binding GridVisibility}">
</Grid>

可以看出,我们通过修改GridVisibility 的值就改变了Grid的状态。

现在有一个需求,要求在执行某个命令时,将输入焦点定位到一个TextBox,我想TextBox是否有一个属性:IsFocused?有就简单了!事实上TextBox并没有这个依赖属性,这就麻烦了。如果不采用MVVM,我在代码中执行txtBoxName.Focus();也就搞定了,但MVVM模式下没有这种操作。这时候附加属性就派上用场了。

 你没有IsFocused这个属性,我给你加一个:

    public class TextBoxHelper
    {
        /// <summary>
        /// 附加属性:IsFocused
        /// </summary>
        public static readonly DependencyProperty IsFocusedProperty =
            DependencyProperty.RegisterAttached("IsFocused",
            typeof(bool), 
            typeof(TextBoxHelper),
            new FrameworkPropertyMetadata(false, OnIsFocusedPropertyChanged));

        public static void SetIsFocused(DependencyObject dp, bool value)
        {
            dp.SetValue(IsFocusedProperty, value);
        }

        public static bool GetIsFocused(DependencyObject dp)
        {
            return (bool)dp.GetValue(IsFocusedProperty);
        }

        private static void OnIsFocusedPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
        {
            TextBox textBox = sender as TextBox;
            if ((bool)e.NewValue)
            {
                textBox.Focus();
                textBox.SelectAll();
            }
        }
    }

  以上就是这个附加属性的定义。下面需要把这个属性提供给控件: 

<UserControl x:Class="LearnWPF.Pages.PageBasicCharacteristicView"              
             xmlns:xy="clr-namespace:LearnWPF.Controls.Helper;assembly=LearnWPF.Controls">   
    <TabControl> 
        <TabItem Header="附加属性">
            <Grid>               
                <TextBox xy:TextBoxHelper.IsFocused="{Binding IsTextBox2Focused}"/>
                <Button Content="Focus TextBox2" Command="{s:Action FocusTextBox2}"/>
            </Grid>
        </TabItem>       
    </TabControl>
</UserControl>

 然后,ViewModel中操作 IsTextBox2Focused即可控制TextBox的焦点了。

    public class PageBasicCharacteristicViewModel : Screen
    {
        public bool IsTextBox2Focused { get; set; }

        public void FocusTextBox2()
        {           
            IsTextBox2Focused = true;             
        }
    }

   

资源

系列目录:WPF开发快速入门【0】前言与目录 

代码下载:Learn WPF: WPF学习笔记 (gitee.com)

标签:入门,void,附加,bool,WPF,TextBox,public,属性
From: https://www.cnblogs.com/seabluescn/p/16579276.html

相关文章

  • Java Servlet 入门:使用Tomat的servlet-api.jar库解决:servlet java.lang.ClassNotFound
    问题:在通过Maven添加依赖:javax.servlet-api后,发现运行总是提示错误:对于新手,如果短时间内,通过网上的教程,无法解决该问题,那么,可以先跳过它。有一种替换方式,就是引用Tomca......
  • WPF 在 Xaml 中设置当控件显示时夺取焦点.
    以下以一个 TextBox 为例,当其变为可见时,获得焦点 <TextBoxx:Name="TextBoxName"/><TextBox.Style><StyleBasedOn="{StaticResource{......
  • Wpf 收到键盘事件时执行 ViewModel 中的命令.
    以 TextBox 中按下 Esc 为例:1<TextBox/>2<TextBox.InputBindings>3<KeyBinding4Key="Escape"5Command="{BindingPa......
  • Java Servlet 入门:问题系列:Eclipse J2EE Preview Server 端口设置方法
    问题:J2EEPreview 是Eclipse内置的Web宿主运行程序,默认占了8088端口。网络上的教程,多数是配置了Tomcat,也是8088端口,两者很容易冲突,引发初学者的问题。因此,新手应该一开......
  • c++和python混合编程,调用了CTP的附加库 (windows)(应该是全网第一篇)
    这是一个连接券商的代码,simnow提供的包,windows版,linux的话,下一篇文章介绍听起来就很复杂,所以需要大家有点功底,不懂的东西,多多百度,因为很多细节,我不可能还教怎么使用visual......
  • C语言 __VA_ARGS__ - C语言零基础入门教程
    一.__VA_ARGS__简介VA_ARGS是一个可变参数的宏,是新的C99规范中新增的,目前似乎只有gcc支持(VC从VC2005开始支持)。VA_ARGS需要配合define使用,总体来说就是将左边......
  • WPF 数据验证
     ValidationValidationRule iDataErrorInfo+DataAnimation的用法//Validation:依赖属性用(在验证回调中返回false)//ValidationRule:依赖属性和普通类的属性都能用......
  • WPF Type Converter和 IValueConverter
    初学者。博客仅做个人的理解整理,不到位的地方欢迎大佬们指出,感谢。 1.类型转换器 TypeConverter1.1类型转换器是用来干什么的?在xaml中给控件的属性赋值,后台代码解析......
  • .NET基础入门
    .Net平台概念:.net与C#.net/dotnet:一般指.NetFramework框架,一种平台,一种技术。C#(sharp):一种编程语言,可以开发基于.net平台的应用。(*)Java即是一种平台又是一种编程语言......
  • zabbix基础入门
    zabbix基础入门zabbix快速入门C/S架构的服务服务端:zabbix-server客户端:zabbix-agentzabbix官网:https://www.zabbix.com/#1.下载zabbix的yum源rpm-Uvhhttps......