繁体   English   中英

将多个项目连接到自定义控件类中的事件处理程序还是使用隐藏的Generic.xaml更好?

[英]Is it better to wire up multiple items to an event handler in custom control class, or use Generic.xaml code-behind?

我正在创建一个数字小键盘作为自定义WPF控件。 我将自定义控件构建为类库,该类库将包含在其他应用程序中。 键盘上有多个按钮,我需要将它们连接到单个事件处理程序。 事件处理程序将确定哪个按钮发送了事件,然后进行适当响应。 定制控件模板位于generic.xaml文件中。

我看到了这样做的两种方法,并且想知道哪种方法更好。

方法1:

我可以在自定义控件类中重写OnApplyTemplate方法,找到每个按钮,并将每个按钮连接到事件处理程序:

        Button enterButton = Template.FindName("PART_EnterButton, this") as Button;
        Button cancelButton = Template.FindName("PART_CancelButton", this) as Button;
        Button deleteButton = Template.FindName("PART_DeleteButton", this) as Button;
        Button decimalButton = Template.FindName("PART_DecimalButton", this) as Button;
        Button buttonOne = Template.FindName("PART_ButtonOne", this) as Button;
        Button buttonTwo = Template.FindName("PART_ButtonTwo", this) as Button;
        Button buttonThree = Template.FindName("PART_ButtonThree", this) as Button;
        Button buttonFour = Template.FindName("PART_ButtonFour", this) as Button;
        Button buttonFive = Template.FindName("PART_ButtonFive", this) as Button;
        Button buttonSix = Template.FindName("PART_ButtonSix", this) as Button;
        Button buttonSeven = Template.FindName("PART_ButtonSeven", this) as Button;
        Button buttonEight = Template.FindName("PART_ButtonEight", this) as Button;
        Button buttonNine = Template.FindName("PART_ButtonNine", this) as Button;

        enterButton.Click += new RoutedEventHandler(KeyPadButtonPressEventHandler);
        cancelButton.Click += new RoutedEventHandler(KeyPadButtonPressEventHandler);
        deleteButton.Click += new RoutedEventHandler(KeyPadButtonPressEventHandler);
        decimalButton.Click += new RoutedEventHandler(KeyPadButtonPressEventHandler);
        buttonOne.Click += new RoutedEventHandler(KeyPadButtonPressEventHandler);
        buttonTwo.Click += new RoutedEventHandler(KeyPadButtonPressEventHandler);
        buttonThree.Click += new RoutedEventHandler(KeyPadButtonPressEventHandler);
        buttonFour.Click += new RoutedEventHandler(KeyPadButtonPressEventHandler);
        buttonFive.Click += new RoutedEventHandler(KeyPadButtonPressEventHandler);
        buttonSix.Click += new RoutedEventHandler(KeyPadButtonPressEventHandler);
        buttonSeven.Click += new RoutedEventHandler(KeyPadButtonPressEventHandler);
        buttonEight.Click += new RoutedEventHandler(KeyPadButtonPressEventHandler);
        buttonNine.Click += new RoutedEventHandler(KeyPadButtonPressEventHandler);

优点:

  • 这将我所有的逻辑都放在一个类定义文件中。

缺点:

  • 这种方法比第二种方法需要更多的代码行。
  • 第一次加载控件时,潜在性能会下降。

方法二:

我可以为generic.xaml文件创建一个代码隐藏。 这将使我能够在xaml中连接事件处理程序,因为generic.xaml文件现在知道在哪里可以找到事件处理程序:

<Button x:Name="buttonThree" Style="{StaticResource ResourceKey=Buttons}"
            Click="KeyPadButtonPressEventHandler" Content="3"  />

在Generic.xaml.cs文件中:

namespace KeyPad
{
partial class Generic : ResourceDictionary
{
    private void KeyPadButtonPressEventHandler(object sender, RoutedEventArgs e)
    {
        //Event handler logic here
    }
}
}

优点:

  • 将按钮连接到事件处理程序不需要任何代码行。
  • 潜在的性能节省,因为在控件加载时不需要连接所有按钮。

缺点:

  • 我在程序集中引入了一个附加文件,开发人员不得不在另一个地方查找我的逻辑。

我会在控件本身内部保留所有自定义控件逻辑。

请记住,generic.xaml仅用于定义控件的外观,这使主题化变得更加容易。

您在generic.xaml中定义的样式很容易被覆盖。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM