【问题标题】:How to create a click handler for my XAML button?如何为我的 XAML 按钮创建单击处理程序?
【发布时间】:2021-04-24 23:02:45
【问题描述】:

我一直在尝试使用一个按钮来通过 Windows 媒体播放器显示视频(它也会循环播放,但我已经解决了)。

我对 c# 很陌生,所以到目前为止,这都是非常基本的代码。

我不确定如何将 xaml 中的按钮链接到我的 c# 代码。

这是我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;


namespace Taillight_Project_3._1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

        }

    
    }
    public class Button : System.Web.UI.WebControls.WebControl, System.Web.UI.IPostBackEventHandler,System.Web.UI.WebControls.IButtonControl { 

    }


}

xaml

<Window x:Class="Taillight_Project_3._1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:Taillight_Project_3._1"
    mc:Ignorable="d"
    Title="MainWindow" Height="450" Width="800"
    xmlns:gif ="https://github.com/XamlAnimatedGif/XamlAnimatedGif">
<Grid>
    <TextBox HorizontalAlignment="Center" Margin="0,10,0,0" Text="Sequential Taillight Simulator 2021" TextWrapping="Wrap" VerticalAlignment="Top" Width="780" Height="50" FontFamily="Bahnschrift" FontSize="50" FontWeight="Normal" FontStyle="Normal" TextDecorations="{x:Null}"/>
    <RadioButton x:Name="BrakeLights" HorizontalAlignment="Center" Width="100" Content="Brake Lights" Margin="0,396,0,22" AutomationProperties.Name="Brakelights"/>
    <StackPanel Margin="0,65,0,43">
        <MediaElement Name="Media1" >
            <MediaElement.Triggers>
                <EventTrigger RoutedEvent="MediaElement.Loaded">
                    <EventTrigger.Actions>
                        <BeginStoryboard>
                            <Storyboard>
                                <MediaTimeline Source="C:\Users\n.a.smith\source\repos\Taillight Project 3.1\Taillight Project 3.1\files\Brake Lights Video.mp4" Storyboard.TargetName="myMediaElement"  RepeatBehavior="Forever" />
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger.Actions>
                </EventTrigger>
            </MediaElement.Triggers>
        </MediaElement>
    </StackPanel>
</Grid>
</Window>

【问题讨论】:

  • 欢迎来到 SO。希望您不介意,但我已经重新措辞了您的标题并格式化了您的帖子。祝你好运!

标签: c# xaml windows-media-player


【解决方案1】:

如果您只想让按钮从 UI 中执行功能,则可以像在 XAML 中添加任何其他元素一样添加它:

...
<Button Content="My Button" ... />
...

如果您想告诉按钮在单击时执行某些操作,那么您可以这样做:

<Button Content="My Button" Click="Button_Click" />

MainWindow 的代码隐藏中,实现该方法:

...
private void Button_Click(object sender, RoutedEventArgs e)
{
    // do something when clicked
}
...

我不会涉及命令或 MVVM 或任何其他内容,只是知道这不一定是大型项目的最佳设计模式。


但是,这部分让我对您的代码有些困惑:

public class Button : System.Web.UI.WebControls.WebControl, System.Web.UI.IPostBackEventHandler,System.Web.UI.WebControls.IButtonControl

您正在Taillight_Project_3._1 命名空间中创建一个类Button,除了它继承的之外没有任何功能或定义。我想这不会编译,因为您没有实现 IPostBackEventHandlerIButtonControl 接口。

【讨论】:

  • 我会尝试一下,但我一直在努力寻找实现按钮功能的方法,所以非常感谢!
  • 啊,好吧,我被你的代码弄糊涂了,因为我认为你的意图是创建一个自定义“按钮”并使用它而不是内置控件:) 你最好的选择是添加按钮标签到您想要的 XAML 中,然后让自动完成插入您的“Click =”方法(它会将正确的代码放在后面并将其链接起来)
  • 我唯一的后续问题是从 c# 函数内部调用视频播放器的最佳方法是什么。 VS 2019 也不喜欢私有 void 部分,但我会尽力让它发挥作用。
  • 您实际上可以查看this answer 以按名称查找元素——在您的情况下,您将其称为Media1。但是,您可能想提出一个新问题,因为答案可能会根据您想要做什么而改变。关于 Click 处理程序的 private void,如果确实需要,您可以更改访问修饰符,但私有方法应该可以从 MainWindow 调用它。您可能遇到了不同的问题(例如,尝试从另一个命名空间或类或其他东西调用事件处理程序)。
  • 私有 void 位现在正在工作,所以谁知道它为什么昨晚不喜欢它。我现在已经明白了,至少可以用谷歌搜索正确的问题。感谢大家的帮助!
猜你喜欢
  • 2011-06-15
  • 1970-01-01
  • 2012-05-23
  • 1970-01-01
  • 1970-01-01
  • 2012-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多