C# 将多个项关联到自定义控件类中的事件处理程序,还是使用Generic.xaml代码隐藏更好?
我正在创建一个数字键盘作为自定义WPF控件。我正在将自定义控件构建为类库,该类库将包含在其他应用程序中。键盘上有多个按钮,我需要连接到一个事件处理程序。事件处理程序将确定哪个按钮发送了事件,然后做出适当的响应。自定义控件模板位于generic.xaml文件中 我认为有两种方法可以做到这一点,我想知道哪种方法被视为更好的解决方案 方法1: 我可以在自定义控件类中重写OnApplyTemplate方法,找到每个按钮,并将它们连接到事件处理程序:C# 将多个项关联到自定义控件类中的事件处理程序,还是使用Generic.xaml代码隐藏更好?,c#,wpf,xaml,C#,Wpf,Xaml,我正在创建一个数字键盘作为自定义WPF控件。我正在将自定义控件构建为类库,该类库将包含在其他应用程序中。键盘上有多个按钮,我需要连接到一个事件处理程序。事件处理程序将确定哪个按钮发送了事件,然后做出适当的响应。自定义控件模板位于generic.xaml文件中 我认为有两种方法可以做到这一点,我想知道哪种方法被视为更好的解决方案 方法1: 我可以在自定义控件类中重写OnApplyTemplate方法,找到每个按钮,并将它们连接到事件处理程序: Button enterButton
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);
<Button x:Name="buttonThree" Style="{StaticResource ResourceKey=Buttons}"
Click="KeyPadButtonPressEventHandler" Content="3" />
优点:
这将我的所有逻辑保存在一个地方,即我的类定义文件中。
缺点:
这种方法比第二种方法需要更多的代码行
方法
当控件加载时,潜在性能受到影响
第一次。
方法2:
我可以为generic.xaml文件创建代码隐藏。这将使我能够连接xaml中的事件处理程序,因为generic.xaml文件现在知道在哪里可以找到事件处理程序:
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);
<Button x:Name="buttonThree" Style="{StaticResource ResourceKey=Buttons}"
Click="KeyPadButtonPressEventHandler" Content="3" />
优点:
将按钮连接到事件处理程序不需要代码行。
潜在的性能节约,因为我不需要在控件加载时连接所有按钮。
缺点:
我已经向我的程序集引入了一个附加文件,这是开发人员必须寻找的另一个地方,以找到我的逻辑。
我会在控件本身中保留任何自定义控件逻辑 请记住,generic.xaml仅用于定义控件的外观,从而更容易设置主题 您在generic.xaml中定义的样式很容易被覆盖