如何从实现页面访问自定义控件内的按钮?
我的generic.xaml包含以下代码:
现在在applyTemplate上,我正在访问如下控件:
public override void OnApplyTemplate() { base.OnApplyTemplate(); ToggleButton playPauseBtn = GetTemplateChild("playPauseBtn") as ToggleButton; Button prevBtn= GetTemplateChild("prevBtn") as Button; Button nextBtn = GetTemplateChild("nextBtn") as Button; MediaElement customMediaPlayer = GetTemplateChild("customMediaPlayer") as MediaElement; playPauseBtn.Checked += (obj, Args) => { customMediaPlayer.Pause(); playPauseBtn.Content = "Play"; }; playPauseBtn.Unchecked += (obj, Args) => { customMediaPlayer.Play(); playPauseBtn.Content = "Pause"; }; nextBtn.Click += (obj, Args) => { customMediaPlayer.Source=new Uri(CustomMediaSource.ToString(),UriKind.RelativeOrAbsolute); }; prevBtn.Click += (obj, Args) => { customMediaPlayer.Source = new Uri(CustomMediaSource.ToString(), UriKind.RelativeOrAbsolute); }; }
现在我想要在我正在实现的页面中使用nextBtn
CustomVideoControl myVControl=new CustomVideoControl();
这将创建控件的实例,但我希望在单击next和previous按钮时执行某些操作,thta存在于generic.xaml中的CustomVideoControl中。 任何帮助将不胜感激。
谢谢,Subhen
您只需要向Control添加几个事件。
public event EventHandler MovedPrevious public event EventHandler MovedNext
现在这通常是这样实现的: –
protected virtual void OnMovedPrevious(EventArgs e) { var handler = MovedPrevious; if (handler != null) handler(this, e); } protected virtual void OnMovedNext(EventArgs e) { var handler = MovedNext; if (handler != null) handler(this, e); }
现在,在您现有的点击事件中: –
nextBtn.Click += (obj, Args) => { customMediaPlayer.Source=new Uri(CustomMediaSource.ToString(),UriKind.RelativeOrAbsolute); //No idea what this doing OnMovedNext(EventArgs.Empty); }; prevBtn.Click += (obj, Args) => { customMediaPlayer.Source = new Uri(CustomMediaSource.ToString(), UriKind.RelativeOrAbsolute); //No idea what this is doing either OnMovedPrevious(EventArgs.Empty); };
现在在你的消费代码中,你可以做这样的事情: –
CustomVideoControl myVControl=new CustomVideoControl(); myVControl.MovedNext += (s, args) => { /* deal with next */ }; myVControl.MovedPrevious += (s, args) => { /* deal with previous */ };
对不起,你做错了。 没有充分理由为什么你应该引用DataTemplate IMO中的元素。 [… 在这个论坛post中阅读更多 …]
您可以在自定义控件中创建公共事件,例如NextButtonClicked和PreviousButtonClicked。
我有一种感觉,你正试图模仿EventSetter的行为。 如果我是对的,请看一下这个简单的例子:
此代码直接从XAML将您的自定义事件分配给某个文本块的常规操作(您不必通过访问控件的属性来污染您的代码)。
我希望这有用,但如果没有,请给我一个大喊。
编辑:
很抱歉没有完全清楚(这只是一个快速粘贴的代码段)。 请看一个完整的例子:
下一个/上一个按钮的样式:
代码背后:
public event EventHandler MovedPrevious; public event EventHandler MovedNext; protected void OnMovedPrevious(object sender, RoutedEventArgs e) { if (MovedPrevious != null) { MovedPrevious(this, e); } } protected void OnMovedNext(object sender, RoutedEventArgs e) { if (MovedNext != null) { MovedNext(this, e); } }
从现在开始,您可以直接从您的控件的处理控件/安东尼发布的内容访问OnMovedNext和OnMovedPrevious 。
对不起,如果我以前的回答令人困惑,但它应该只是一个灵感做什么:)
编辑:
我没有注意到这只涉及我向其道歉的Silverlight :)但是,如果您想尝试,它对WPF非常有效。
上述就是C#学习教程:如何从实现页面访问自定义控件内的按钮?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1014822.html