您现在的位置是:主页 > news > wordpress设置登陆口/网站搜索优化价格

wordpress设置登陆口/网站搜索优化价格

admin2025/4/29 11:14:01news

简介wordpress设置登陆口,网站搜索优化价格,做app+的模板下载网站,小程序开发厂家文章目录前言一、原理说明二、如何实现?1.创建cs文件2.定义附加属性3.属性赋值3.注册回调事件三、示例总结前言 在使用wpf开发的时候,我们经常会用到style,通常会把style放到一个资源字典文件中,以方便多处复用。定义style的时候…

wordpress设置登陆口,网站搜索优化价格,做app+的模板下载网站,小程序开发厂家文章目录前言一、原理说明二、如何实现?1.创建cs文件2.定义附加属性3.属性赋值3.注册回调事件三、示例总结前言 在使用wpf开发的时候,我们经常会用到style,通常会把style放到一个资源字典文件中,以方便多处复用。定义style的时候…

文章目录

  • 前言
  • 一、原理说明
  • 二、如何实现?
    • 1.创建cs文件
    • 2.定义附加属性
    • 3.属性赋值
    • 3.注册回调事件
  • 三、示例
  • 总结


前言

在使用wpf开发的时候,我们经常会用到style,通常会把style放到一个资源字典文件中,以方便多处复用。定义style的时候希望使用控件事件实现一些操作,但是style并不支持事件赋值。这里提供一种style中注册控件事件的方法。


一、原理说明

1、在xaml中可以使用依赖属性。

DependencyProperty

2、我们可以自定义依赖属性,自定义的依赖属性也可以在xmal中控件中使用。

<Button  local:MyClass.MyProperty="1" />

3、在style中也能使用setter给控件属性赋值。

<Style ><Setter Property="local:MyClass.MyProperty" Value="1"></Setter>
</Style>

4、自定义的依赖属性有属性改变事件,注册此事件,在事件中能获取附属控件对象。

public static void PropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e);

基于上述4点,我们只需要自定义依赖属性,在style中给属性赋值,在属性改变事件中获取控件对象,并进行初始化操作,即完成了style对cs代码的调用。


二、如何实现?

1.创建cs文件

创建一个style对应的cs文件,这里要注意名称要与资源字典文件名相同加cs后缀,这样vs会把cs文件当成资源字典文件的附属文件,可以自动折叠。如下图所示。
我们现在有一个ButtonStyle.xaml的资源字典
在这里插入图片描述
添加一个同名的cs文件
在这里插入图片描述
cs文件就会变成资源字典的附属文件。
在这里插入图片描述

2.定义附加属性

在ButtonStyle.xaml.cs中定义一个附加属性,名称为ButtonInit。附加属性通过propa+tab的方式快捷定义。

在这里插入图片描述

3.属性赋值

在Style的资源字典中,给上述定义的附加属性赋值。

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:WpfApp1"><Style x:Key="ButtonStyle_Normal" TargetType="Button"><!--给附加属性赋值--><Setter Property="local:ButtonStyle.ButtonInit" Value="True"></Setter></Style>
</ResourceDictionary>

3.注册回调事件

在依赖属性的属性改变事件中,注册控件的事件。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
namespace WpfApp1
{class ButtonStyle{public static bool GetButtonInit(DependencyObject obj){return (bool)obj.GetValue(ButtonInitProperty);}public static void SetButtonInit(DependencyObject obj, bool value){obj.SetValue(ButtonInitProperty, value);}// Using a DependencyProperty as the backing store for ButtonInit.  This enables animation, styling, binding, etc...public static readonly DependencyProperty ButtonInitProperty =DependencyProperty.RegisterAttached("ButtonInit", typeof(bool), typeof(ButtonStyle), new PropertyMetadata(false, PropertyChangedCallback));//属性改变的回调事件public static void PropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e){//d即是Style应用的对象。var button = d as Button;//注册Loaded事件button.Loaded += (S, E) => { };//注册Click事件button.Click += (S, E) => { };//其他初始化处理}}
}

三、示例

1、《C# wpf style中实现ListBox自动生成序号》
2、《C# wpf 在style中自定义标题栏及无边框窗口》


总结

上述方法实现的style调用cs代码,很好的拓展了style的用法,同时cs文件始终跟随资源字典文件,把cs文件理解和定义为资源字典的一部分,就不存在代码耦合问题