1

我最近开始在 DLL 中移动我的用户控件。这些控件通常看起来像这样:

<UserControl x:Class="DialogBase.UserControl1"
         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" 
         mc:Ignorable="d"
         DataContext="{Binding RelativeSource={RelativeSource Self}}">
    <Grid>
        <Button Content="OK" Click="OkButton_Click"/>
    </Grid>
</UserControl>

我希望能够像在标准控件中一样使用控件中的每个按钮。例如,当有人使用上面的控件时,他应该能够以自己的方法处理 click 事件,如下所示:

<lib:UserControl1 
        OkButtonClick="MyCostomClickMethod"
        />

我通常是这样实现的:(用户控件的代码隐藏文件)

    public static RoutedEvent OkButtonClickEvent = EventManager.RegisterRoutedEvent("OkButtonClick", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(UserControl1));

    public event RoutedEventHandler OkButtonClick
    {
        add 
        { 
            AddHandler(OkButtonClickEvent, value); 
        }
        remove
        {
            RemoveHandler(OkButtonClickEvent, value);
        }
    }

    private void OkButton_Click(object sender, RoutedEventArgs e)
    {
        RaiseEvent(new RoutedEventArgs(OkButtonClickEvent));
    }

这工作正常但很慢。单击和产生的操作之间的延迟可能长达一秒。有人可以告诉我是否有更快或更好的方法来做到这一点?

4

1 回答 1

0

我会在你真正想要的事件的类中创建一个命令。然后将按钮命令绑定到它。您可以创建自己的命令或使用DelegateCommand 之类的东西

于 2012-06-06T16:27:30.497 回答