none
关于自定义控件的问题请教各位大牛~ RRS feed

  • 问题

  • RT

    假如我有个自定义控件,我将其显示在一个窗体上,我的自定义控件上有几个按钮,比如说其中一个按钮我想要的click事件是在窗体上再显示一个其他的控件,请问这样的情况在wpf中怎么实现,我试出了一种方法是在窗体的文件中添加buttonbase.click,之后根据不同的button控制不同的事件,但是正常的比较合理的方式是什么?或者说这种情况是不是就不应该自定义控件

    PS:为什么自定义控件在窗体中都是无法创建实例,但是一debug就可以?

    以上请各位大牛帮忙,有一些概念学的还不是很扎实~


    请大家多支持学生专区~~
    2011年2月23日 5:28

答案

  • 你好,

    我很仔细的读了你的帖子,但是,我不清楚你最需要的是什么。

    你是想知道是否该用UserControl去完成你的项目?

    还是想去了解一个UserControl如何添加另一个UserControl?

    还是想知道,点击一个Button添加一个Control这样的效果应该如何去做?

    由于不是很明确你的需求,我只能尽我能力,一个一个的解答你的问题了。

    -->       是否该用UserControl去完成你的项目?

    这个问题我觉得要根据你的项目特殊需要,如果你就是想用一个Button去增加一个UserControl,这样就没有必要把这个Button定义成一个UserControl了,不过,如果你现在需要一排Button然后你想更好的控制这些Button,你要把这些Button定义成一个UserControl也是完全可以的,然后这样会使你定义你UserControl的Style或者是Template的时候会更加方便一些。据我的理解,对于UserControl没有什么硬性的规定。题外话:UserControl和CustomControl是不同的,所以抉择是否定义UserControl或者CustomControl的标准也是不一样的。

    -->       还是想去了解一个UserControl如何添加另一个UserControl

    对于这个问题,我这样给你解释,假设你的项目已经存在Window,UserControl1,Usercontrol2. 现在如果你要在UserControl1里面的某一个Button的Click事件里面完成“向Window里面添加一个UserControl2”。你可以在你的Click事件里面用下面的代码去添加:

    ((StackPanel)(Application.Current.MainWindow.FindName("StackPanel"))).Children.Add(UserControl2);

    注:我的Window是MainWindow,在这个MainWindow里面有个StackPanel,名字是StackPanel,UserControl2是另一个UserControl的名字。

    这样就完成添加了。

    还有一种方法是你先将UserControl2定义在MainWindow里面(Xaml里面完成),然后用UserControl1的Click事件控制另一个UserControl的Visibility属性。这样也是可以的。

    -->       还是想知道,点击一个Button添加一个Control这样的效果应该如何去做?

    我觉得看完上面的回复,你已经明白了如何去做,大方向就是:要么动态添加进去,要么就是控制Visibility属性,实现方法就有很多了,Trigger,事件,Command都是可以的。

    -->       为什么自定义控件在窗体中都是无法创建实例,但是一debug就可以?

    是可以的。我觉得你可以看看这方面的资料先:

    http://msdn.microsoft.com/zh-cn/library/system.windows.controls.usercontrol.aspx

    http://www.c-sharpcorner.com/UploadFile/mahesh/WpfUserControl06292008215701PM/WpfUserControl.aspx (有例子可以下载)

    还有好多,你可以到网上搜索一下。

     

    Best regards,


    Sheldon _Xiao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 doukooo 2011年2月23日 10:19
    2011年2月23日 8:09
    版主

全部回复

  • 你好,

    我很仔细的读了你的帖子,但是,我不清楚你最需要的是什么。

    你是想知道是否该用UserControl去完成你的项目?

    还是想去了解一个UserControl如何添加另一个UserControl?

    还是想知道,点击一个Button添加一个Control这样的效果应该如何去做?

    由于不是很明确你的需求,我只能尽我能力,一个一个的解答你的问题了。

    -->       是否该用UserControl去完成你的项目?

    这个问题我觉得要根据你的项目特殊需要,如果你就是想用一个Button去增加一个UserControl,这样就没有必要把这个Button定义成一个UserControl了,不过,如果你现在需要一排Button然后你想更好的控制这些Button,你要把这些Button定义成一个UserControl也是完全可以的,然后这样会使你定义你UserControl的Style或者是Template的时候会更加方便一些。据我的理解,对于UserControl没有什么硬性的规定。题外话:UserControl和CustomControl是不同的,所以抉择是否定义UserControl或者CustomControl的标准也是不一样的。

    -->       还是想去了解一个UserControl如何添加另一个UserControl

    对于这个问题,我这样给你解释,假设你的项目已经存在Window,UserControl1,Usercontrol2. 现在如果你要在UserControl1里面的某一个Button的Click事件里面完成“向Window里面添加一个UserControl2”。你可以在你的Click事件里面用下面的代码去添加:

    ((StackPanel)(Application.Current.MainWindow.FindName("StackPanel"))).Children.Add(UserControl2);

    注:我的Window是MainWindow,在这个MainWindow里面有个StackPanel,名字是StackPanel,UserControl2是另一个UserControl的名字。

    这样就完成添加了。

    还有一种方法是你先将UserControl2定义在MainWindow里面(Xaml里面完成),然后用UserControl1的Click事件控制另一个UserControl的Visibility属性。这样也是可以的。

    -->       还是想知道,点击一个Button添加一个Control这样的效果应该如何去做?

    我觉得看完上面的回复,你已经明白了如何去做,大方向就是:要么动态添加进去,要么就是控制Visibility属性,实现方法就有很多了,Trigger,事件,Command都是可以的。

    -->       为什么自定义控件在窗体中都是无法创建实例,但是一debug就可以?

    是可以的。我觉得你可以看看这方面的资料先:

    http://msdn.microsoft.com/zh-cn/library/system.windows.controls.usercontrol.aspx

    http://www.c-sharpcorner.com/UploadFile/mahesh/WpfUserControl06292008215701PM/WpfUserControl.aspx (有例子可以下载)

    还有好多,你可以到网上搜索一下。

     

    Best regards,


    Sheldon _Xiao [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 doukooo 2011年2月23日 10:19
    2011年2月23日 8:09
    版主
  • thank you~~呵呵 我就是想让您都解答一下 十分感谢~~
    请大家多支持学生专区~~
    2011年2月23日 10:19