Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将多个项关联到自定义控件类中的事件处理程序,还是使用Generic.xaml代码隐藏更好?_C#_Wpf_Xaml - Fatal编程技术网

C# 将多个项关联到自定义控件类中的事件处理程序,还是使用Generic.xaml代码隐藏更好?

C# 将多个项关联到自定义控件类中的事件处理程序,还是使用Generic.xaml代码隐藏更好?,c#,wpf,xaml,C#,Wpf,Xaml,我正在创建一个数字键盘作为自定义WPF控件。我正在将自定义控件构建为类库,该类库将包含在其他应用程序中。键盘上有多个按钮,我需要连接到一个事件处理程序。事件处理程序将确定哪个按钮发送了事件,然后做出适当的响应。自定义控件模板位于generic.xaml文件中 我认为有两种方法可以做到这一点,我想知道哪种方法被视为更好的解决方案 方法1: 我可以在自定义控件类中重写OnApplyTemplate方法,找到每个按钮,并将它们连接到事件处理程序: Button enterButton

我正在创建一个数字键盘作为自定义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);
<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中定义的样式很容易被覆盖