C#学习教程:在WPFUserControl中附加ICommandUserControl:publicpartialclassImageButton:UserControl{//////获取或设置要渲染的图像源的依赖属性。///publicstaticDependencyPropertyImageSourceProperty=DependencyProperty.Register("ButtonImage",typeof(ImageSource),typeof(ImageButton));publicstaticDependencyPropertyTextProperty=DependencyProperty.Register("ButtonText",typeof(string),typeof(ImageButton));publicstaticDependencyPropertyButtonCommandProperty=DependencyProperty.Register("ButtonCommand",typeof(ICommand),typeof(ICommand),(ImageButton));publicImageButton(){this.DataContext=this;初始化组件();}//////获取或设置按钮命令。///publicICommandButtonCommand{get{return(ICommand)GetValue(ImageButton.ButtonCommandProperty);}set{SetValue(ImageButton.ButtonCommand属性,值);}}//////获取或设置按钮图像。///publicImageSourceButtonImage{get{return(ImageSource)GetValue(ImageButton.ImageSourceProperty);}set{SetValue(ImageButton.ImageSourceProperty,value);}}//////获取或设置按钮文本。///publicstringButtonText{get{return(string)GetValue(ImageButton.TextProperty);}set{SetValue(ImageButton.TextProperty,value);然后,当我声明我的按钮时,它给出:同样糟糕,当我点击我的ImageButton时,没有任何反应当我用一个简单的按钮替换ImageButton时,调用ICommand。我什至尝试过简单地扩展Button类并绑定一个ICommand,但同样,它没有用……感谢帮助!谢谢。您可以使用样式和一些附加属性以更简洁的方式实现这一点。附加属性将存储您的特定信息。该样式将采用这些属性并构建您想要的外观。该元素仍然是一个按钮,因此命令和其他一切都将起作用。公共类ImageButton{publicstaticImageSourceGetImage(DependencyObjectobj){return(ImageSource)obj.GetValue(ImageProperty);}publicstaticvoidSetImage(DependencyObjectobj,ImageSourcevalue){obj.SetValue(ImageProperty,value);}publicstaticonlyDependencyPropertyImageProperty=DependencyProperty.RegisterAttached("Image",typeof(ImageSource),typeof(ImageButton),newUIPropertyMetadata(null));publicstaticStringGetCaption(DependencyObjectobj){return(String)obj.GetValue(CaptionProperty);}publicstaticvoidSetCaption(DependencyObjectobj,Stringvalue){obj.SetValue(CaptionProperty,value);}publicstaticreadonlyDependencyPropertyCaptionProperty=DependencyProperty.RegisterAttached("Caption",typeof(String),typeof(ImageButton),newUIPropertyMetadata(null));然后你可以使用它来声明你的按钮:注意:我很确定通过“模板”属性并使用ControlTemplate和TemplateBindings更干净,但这意味着重新创建内容周围的边框和东西,所以如果你只是想要定义一个默认值,我认为,“内容”,在我的例子中是可行的方法。如果您想要添加到按钮的唯一功能是在按钮上添加图像,那么我认为您是从错误的方向来实现的。WPF很棒,因为UI控件看起来很干净。这意味着Control只是函数的定义+一些模板来定义它的外观。这意味着可以随时换出模板以改变外观。此外,几乎任何控件都可以放置在几乎任何控件中。例如,要在您的xaml中定义一个具有您想要的外观和感觉的按钮:......请记住,在使用WPF时,您不必在每次要更改按钮时都定义新的CustomControl或UserControl某物的出现。唯一需要CustomControl的情况是当您想要向现有控件添加功能或创建任何其他控件中不存在的功能时。由于评论而编辑:如果您不想每次都定义按钮的内容,另一种选择是只有一个poco(普通旧CLR对象)类来定义您感兴趣的所有内容(我将编写我的示例正如你所做的那样)因为工具栏这样做是因为它对我来说很有意义:{得到。..set...}}那里有一个已定义的数据模板(App.xaml、Window.Resources等):然后在您的xaml中使用这样的人:...我只是不知道您是否尝试喜欢这种实现方式是您可以实现的最WPF方式。编辑根据第二条评论更新抱歉,我忘了包含ContentControl。现在我想起来了,我意识到这比您手动指定内容的原始文件要简单得多。我会发布一个新答案来帮助您解决原来的问题。重新回答原来的问题:我认为您想做的是创建一个名为ImageButton的新CustomControl。然后将其更改为从Button而不是Control扩展。您不需要Command属性,因为Button已经有一个。您只需添加一个Image属性,就可以重用按钮中的Content属性而不是Text属性。创建CustomControl时,它将在Generic.xaml中为ImageButton的默认样式添加一个条目。在SetterforTemplate属性中,您可以将ControlTemplate更改为:然后,当您想要使用它时:...Associer...内置WPF按钮包含激活其他命令以响应被单击的代码。您的“ImageButton”是从UserControl派生的,因此您不会得到这种行为。获得所需内容的最短路径可能是让ImageButton类实际上派生自WPFButton类。为此,将ImageButton的标记从...更改为...,然后将ImageButton的基类从UserControl更改为Button。在一切正常之前,您可能需要进行一些其他小的更改。以上就是C#学习教程:在WPFUserControl中添加ICommand共享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处:
