WPF C# 使用 Windows 组件管理来自不同类的事件

WPF C# Manage events from different class with windows components

提问人:signor rossi 提问时间:12/5/2022 最后编辑:signor rossi 更新时间:12/5/2022 访问量:75

问:

我想创建一个具有不同窗口元素的个人组件。为了简单起见,这里只有一个标签和三个radiobtn。现在,我决定创建一个简单的新类,而不是扩展其他类。

    class BoxActionPlayer
    {

        public StackPanel stkPanel { get; set; }
        Label lbl;
        RadioButton rdBtn1;
        RadioButton rdBtn2;
        RadioButton rdBtn3;
        RadioButton rdBtn4;

        public BoxActionPlayer(string actionPlayer)
        {
            InitializeComponent(actionPlayer);
        }

        private void InitializeComponent(string actionPlayer)
        {
            stkPanel = new StackPanel();
            lbl = new Label();
            rdBtn1 = new RadioButton();
            rdBtn2 = new RadioButton();
            rdBtn3 = new RadioButton();



            lbl.Content = actionPlayer;
            rdBtn1.Content = "Fold";
            rdBtn2.Content = "Check";
            rdBtn3.Content = "Call";
            stkPanel.Children.Add(lbl);
            stkPanel.Children.Add(rdBtn1);
            stkPanel.Children.Add(rdBtn2);
            stkPanel.Children.Add(rdBtn3);
            stkPanel.Children.Add(rdBtn4);
             
            //there how i manage event of rdBtn1,rdBtn2,rdBtn3 ??
           //but i need information in other class
        }
    }

现在我该如何管理活动?如果我像这样在MainWindow中使用这个类:

 public partial class MainWindow : Window
    {
        GameStart game;

        public MainWindow()
        {
            game = new GameStart();
            InitializeComponent();
            startGame();

        }

        #region private routine


        private void startGame()
        {
             //some stuff here..
             //on main windows there is a
             // one grid 
             // and 
             //two radio button that are subscribed on radio_btn_checked
             //

                BoxActionPlayer boxAction = new BoxActionPlayer(stringHere);
                grid1.Children.Add(boxAction.stkPanel);
                Grid.SetColumn(boxAction.stkPanel, 2);
                // Grid.SetRow(boxAction.stkPanel, 1);
                // this.Show();
                boxAction = new BoxActionPlayer(stringHere());
                grid1.Children.Add(boxAction.stkPanel);
                Grid.SetColumn(boxAction.stkPanel, 3);
                ..
                ..
            }
        }
        #endregion

        private void Radio_btn_checked(object sender, RoutedEventArgs e)
        {
            var button = sender as RadioButton;
            MessageBox.Show(button.GroupName + " " + button.Content.ToString());
        }
    }
}

如何将 BoxActionPlayer 类中的 rdBtn1、rdBtn2、rdBtn3 订阅到 Main Windows 类中的Radio_btn_checked,即使它们位于不同的中?

如果可能的话,我需要更多一般的提示: 在我的编程风格中,我经常使用GUI部分作为桥梁。 我经常有一个由许多其他人组成的类(建模对象)。这个类具有“俄罗斯套娃”效果。(它包含另一个)

我从 Windows 主类(通过 GUI)收集输入数据,并将其发送到具有 matrioska effec(输入作为参数)的类。

一般来说,如果我使用 Windows 组件创建其他类(如复选框、按钮等..)

我应该如何处理这些事件,以便在主类(公共分部类MainWindow:Window)中使用它们(如上例所示) 有没有更好的方法?泰。

在示例中,我需要动态创建组件 BoxActionPlayer(是 label、txtbox 和 radiobutton 的组合),runtime.IT 这取决于用户在上一个单选按钮中选择的选项。 对于特定的用户选择,我需要生成更多的 BoxActionPlayer(label、txtbox 和单选按钮的组合) 但是我不知道如何处理来自不同类的事件(我需要检索用户所做的选择并在主 windows 类中使用它。

我的English.Ty的借口

我考虑过在 BoxActionPlayer 中创建一个字段,我可以在其中存储用户选择,然后通过 getter 传递它。但是我如何通知我有一个新的输入参数呢?

在每种情况下,我都需要对我不知道如何捕获的事件做出反应并传递给另一个类

C# 事件 事件处理 WPF 控件

评论

0赞 emoacht 12/5/2022
仅通过代码构建视图并非不可能,但这将是非常繁重的。我建议将它们托管在.System.Windows.Controls.UserControl
0赞 EldHasp 12/5/2022
在 WPF 中,UI 对象的状态完全由其属性的当前值决定。因此,UI 元素的表示形式必须依赖于元素的属性。如果你需要一些额外的行为,额外的属性,那么我认为你需要使用自定义控件。
0赞 EldHasp 12/5/2022
您将在 Sharp、RoutedEvent(您需要的行为逻辑)上单独设置必要的附加属性。在默认主题 (Themes/Generic.xaml) 中,单独设置元素的模板以呈现它。父元素(如窗口)不应侦听嵌套的 UI 元素事件,而应侦听元素的属性和 RoutedEvent。

答: 暂无答案