none
WPF控件开发中的问题 RRS feed

  • 问题

  • <UserControl x:Class="WpfControlLibrary3.UserControl1"
           xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
           xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
           xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
           mc:Ignorable="d" 
           d:DesignHeight="242" d:DesignWidth="460" >
      
    </UserControl>
    
    这是xaml文件中的代码,其中的usercontrol的命名空间是system.window.control,我需要把他改为system.window.forms的usercontrol,请问如何操作?
    
    2011年5月20日 1:21

答案

  • WPF使用DX技术,不是每次界面失效都会有去调用它所对应的OnRender方法的。这点是和Winform不同的。

    你在WPF里面完全可以根据MouseMove事件直接在WPF的布局中画,增加对象。

    还有,还是建议如果对移植没有把握的话,直接使用WinfowsFormsHost 来Host Winform控件好了。


    Bob Bao [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.

    • 已标记为答案 conarena 2011年5月21日 8:13
    2011年5月21日 8:05
    版主
  • WPF 和 Winform是两块独立的技术,没有直接的转换关系,所以你的问题的答案是,“不能实现。”

    如果你只是想UI上做到很象,你可以把你的UI设计拿出来,在Winform中独立实现。

    Sincerely,


    Bob Bao [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.

    2011年5月20日 2:52
    版主
  • 还有,如果你只是想用XAML形式来写Winform 的 UserControl的话,你可用下面的方法:

    • 项目中引入winform的程序集,System.Window.Forms
    • 向你已经做得一样,建立一个新的WPF UserControl文件。打开XAML下面的那个折叠的 UserControl1.xaml.cs 文件. 修改成这样:
      public partial class WinFormUserControl : System.Windows.Forms.UserControl
      {
        public WinFormUserControl()
        {
          InitializeComponent();
        }
      }
    

    UserControl1.xaml修改成:

    <UserControl x:Class="WpfApplication1.WinFormUserControl"
           xmlns="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
      <UserControl.Controls>
        <!-- Add your Winform Controls -->
      </UserControl.Controls>
    </UserControl>
    

     

    • 这样你就可以用XAML来写Winform 的UserControl。

    我有个例子,你可以参考下:http://cid-51b2fdd068799d15.office.live.com/self.aspx/.Public/Samples%5E_2011/20110520%5E_WinformUserControlInXAML.zip

     

    Sincerely,


    Bob Bao [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.

    2011年5月20日 3:43
    版主
  • 首先我要澄清的是,我的方法并不是一个通常推荐的方法,微软还是建议使用一般的方法去设计Winform 的UserControl的,所以我个人还是建议你不要逃过分去尝试使用XAML来设计Winform UserControl。

    然后是,Winform的UserControl本身和WPF的UserControl是本质上两个对象,不要把WPF上的一些想法去套上Winform的影子。不过,你的这个要求还是可以实现的。

    你只要在UserControl的cs代码中声明一个属性叫做Text 然后在这个属性的Setter方法中把值赋给它里面的Button.Text上

     

    Sincerely,


    Bob Bao [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.

    • 已标记为答案 conarena 2011年5月21日 0:32
    2011年5月20日 18:41
    版主

全部回复

  • WPF 和 Winform是两块独立的技术,没有直接的转换关系,所以你的问题的答案是,“不能实现。”

    如果你只是想UI上做到很象,你可以把你的UI设计拿出来,在Winform中独立实现。

    Sincerely,


    Bob Bao [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.

    2011年5月20日 2:52
    版主
  • 还有,如果你只是想用XAML形式来写Winform 的 UserControl的话,你可用下面的方法:

    • 项目中引入winform的程序集,System.Window.Forms
    • 向你已经做得一样,建立一个新的WPF UserControl文件。打开XAML下面的那个折叠的 UserControl1.xaml.cs 文件. 修改成这样:
      public partial class WinFormUserControl : System.Windows.Forms.UserControl
      {
        public WinFormUserControl()
        {
          InitializeComponent();
        }
      }
    

    UserControl1.xaml修改成:

    <UserControl x:Class="WpfApplication1.WinFormUserControl"
           xmlns="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
      <UserControl.Controls>
        <!-- Add your Winform Controls -->
      </UserControl.Controls>
    </UserControl>
    

     

    • 这样你就可以用XAML来写Winform 的UserControl。

    我有个例子,你可以参考下:http://cid-51b2fdd068799d15.office.live.com/self.aspx/.Public/Samples%5E_2011/20110520%5E_WinformUserControlInXAML.zip

     

    Sincerely,


    Bob Bao [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.

    2011年5月20日 3:43
    版主
  • 你好,还有一个问题,你的哪个程序中,如何将WinFormUserControl的text直接关到里面的哪个button的text呢?

    就是说 在mainform.xmal中修改WinFormUserControl的text,等同于修改button的text??

    2011年5月20日 11:47
  • 首先我要澄清的是,我的方法并不是一个通常推荐的方法,微软还是建议使用一般的方法去设计Winform 的UserControl的,所以我个人还是建议你不要逃过分去尝试使用XAML来设计Winform UserControl。

    然后是,Winform的UserControl本身和WPF的UserControl是本质上两个对象,不要把WPF上的一些想法去套上Winform的影子。不过,你的这个要求还是可以实现的。

    你只要在UserControl的cs代码中声明一个属性叫做Text 然后在这个属性的Setter方法中把值赋给它里面的Button.Text上

     

    Sincerely,


    Bob Bao [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.

    • 已标记为答案 conarena 2011年5月21日 0:32
    2011年5月20日 18:41
    版主
  • HI,Bob,最后一个问题,我在做的事情 是把VS2005中写的一个winform控件移植到WPF中。我做了两种尝试,一个先移植到VS2010的winform控件中,然后在WPF中引入,这个尝试成功了;但我始终觉得这样做很粗糙,因为毕竟这个控件 我是想在一个WPF应用程序中使用,所以我新建了一个WPF用户控件,打算这样移植。但是现在遇到了不少问题,在VS2005中

    namespace WindowsControlLibrary2

    {

        public partial class LinkButton : UserControl

        {

    usercontrol的命名空间 我注意到是位于system.window.forms.control中,而WPF的Xmal文件中的uercontrol是位于system.window.control下,这个你上面也提到了。我的问题是,在编写winform控件时候,触发OnPaint事(因为我需要根据鼠标的动作我重新绘制控件)件 用到的是

    Invalidate()方法。但是现在在WPF控件编写的时候,我竟然找不到一个可以触发OnPaint事件的方法。。望赐教!

    2011年5月21日 7:46
  • WPF使用DX技术,不是每次界面失效都会有去调用它所对应的OnRender方法的。这点是和Winform不同的。

    你在WPF里面完全可以根据MouseMove事件直接在WPF的布局中画,增加对象。

    还有,还是建议如果对移植没有把握的话,直接使用WinfowsFormsHost 来Host Winform控件好了。


    Bob Bao [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.

    • 已标记为答案 conarena 2011年5月21日 8:13
    2011年5月21日 8:05
    版主