WPF自定义控件引发GUI处理的事件。

12 浏览
0 Comments

WPF自定义控件引发GUI处理的事件。

在WPF中应该什么时候使用依赖属性?

与使用.NET属性相比,依赖属性是静态的,因此节省了大量内存。

使用依赖属性而不是.NET属性的其他好处包括:

1)无需检查线程访问

2)促使包含元素进行渲染

等等…

所以似乎我应该在我使用WPF的项目中始终使用依赖属性?

也许对于一些辅助类的琐碎属性,我可以使用.NET属性来应付。

0
0 Comments

在创建自定义WPF控件时,创建DependencyProperty的主要原因是可以将其用作绑定的源和目标,并且可以进行动画操作。所有框架控件的属性都是使用DependencyProperty实现的,这就是为什么可以在XAML中进行强大的数据绑定的原因。然而,在大多数情况下,例如在使用MVVM模式时,不需要使用依赖属性,只需要使用INotifyPropertyChanged接口就足够了。

当我们需要创建自定义控件并希望控件与GUI进行交互时,我们可以通过在控件中定义和引发事件来实现。这样,GUI就可以订阅这些事件并根据需要执行相应的操作。

以下是一个示例,说明了WPF自定义控件引发事件供GUI处理的原因以及解决方法:

public class CustomControl : Control
{
    public static readonly RoutedEvent CustomEvent = EventManager.RegisterRoutedEvent(
        "Custom", 
        RoutingStrategy.Bubble, 
        typeof(RoutedEventHandler), 
        typeof(CustomControl));
    public event RoutedEventHandler Custom
    {
        add { AddHandler(CustomEvent, value); }
        remove { RemoveHandler(CustomEvent, value); }
    }
    protected virtual void OnCustom()
    {
        RoutedEventArgs args = new RoutedEventArgs(CustomEvent);
        RaiseEvent(args);
    }
}

在上面的示例中,我们创建了一个名为Custom的自定义事件,并将其定义为路由事件。然后,我们在自定义控件中定义了一个名为OnCustom的虚拟方法,用于引发该事件。

GUI可以像订阅其他事件一样订阅Custom事件,并在事件处理程序中执行所需的操作。这样,当自定义控件触发Custom事件时,GUI就能够响应并进行相应的处理。

使用自定义事件的好处是可以将控件与GUI解耦,使其能够以一种模块化的方式进行开发和维护。此外,通过自定义事件,我们可以实现控件与GUI之间的松散耦合,提高代码的可重用性和可扩展性。

0
0 Comments

问题:WPF自定义控件如何抛出事件供GUI处理?

WPF中有一个特殊的功能,称为依赖属性(Dependency Property)。依赖属性与普通的.NET属性有一些区别。普通的.NET属性的值直接从类的私有成员中读取,而依赖属性的值在调用继承自DependencyObject的GetValue()方法时会动态解析。

当设置依赖属性的值时,它并不存储在对象的字段中,而是存储在由基类DependencyObject提供的键值对字典中。每个条目的键是属性的名称,值是要设置的值。

依赖属性的优点有:

1. 减少内存占用:对于UI控件的大部分属性来说,它们通常保持初始值不变。使用字段为每个属性存储会造成巨大的资源浪费。依赖属性通过仅在实例中存储修改过的属性来解决这些问题,而默认值只存储在依赖属性中一次。

2. 值继承:当访问依赖属性时,值会根据一种值解析策略进行解析。如果没有设置局部值,依赖属性会在逻辑树中向上导航,直到找到一个值为止。当在根元素上设置FontSize属性时,它会应用于所有下面的文本块,除非你覆盖该值。

3. 变更通知:依赖属性具有内置的变更通知机制。通过在属性元数据中注册回调函数,当属性的值发生变化时,你将得到通知。这也被数据绑定使用。

以上是依赖属性的一些特点。如果想要了解更多关于依赖属性的魔力背后的细节,请查看下面的链接:dependency properties in WPF

,依赖属性在WPF中具有很多优点,但是否总是使用依赖属性取决于具体的场景和需求。

0
0 Comments

WPF自定义控件引发GUI处理的事件的原因是使用依赖属性。依赖属性具有以下几个主要的应用场景:

1. 当你创建一个用户控件或自定义控件,并且希望属性可以进行数据绑定时,可以使用依赖属性作为绑定目标。

2. 当你希望属性的改变能够自动通知其他相关对象,包括强制校正和验证。

3. 当你希望属性的值可以在样式、主题、父级或默认值中进行继承。

4. 在模型或视图模型层创建属性通常不适合使用依赖属性,因为这些属性的值往往是每个实例都会不断变化的,将属性定义为依赖属性会增加解析依赖属性值的负担,而对于节省内存来说并没有太大帮助。

另外,使用依赖属性的情况还包括样式和动画,以及希望能够通过XAML绑定属性值的场景。在XAML中,必须使用依赖属性来定义所有想要在XAML中使用的属性,这是与Silverlight的主要区别之一,Silverlight允许在XAML中使用普通属性。

总之,使用依赖属性可以使控件的属性具有更多的功能和灵活性,以及实现与其他对象的数据绑定和通知。

0