none
WPF中windows form控制visible问题 RRS feed

  • 问题

  • 各位前辈们:
    本人是菜鸟一只..我和朋友在做一个项目..
    之前都是用WINDOWS FORM做的,现在要把它转入WPF,然后利用EXPRESSION BLEND来做UI美化..
    但是遇到一些问题.
    我们把win form利用windowsformhost转入WPF中,为了隐藏winform固定的外框,我的搭档把它的transparency 属性设为true,结果整个winform里面带的control都看不见了.
    之前是想利用一个listbox显示结果的..transparency设置完之后整个listbox跟着一起隐藏了.
    我想问的是,
    怎样才能在WPF中隐藏windows form的外框,但是不隐藏form里面的control呢?
     
    期待各位的回答~
    多谢啦!呵呵
    2011年1月17日 3:50

答案

  • 孤单的树,

    你好!首先感谢Jarrey作出的答案!

    根据我的理解,你是想要实现WPF中用WindowsFormsHost寄宿winform控件,并且隐藏winform的固定边框。

    按照你的描述我尝试写了一段代码,在WPF窗体程序中,用WindowsFormsHost保存了一个winform中ListBox,我得到的UI如下图所示

    http://pvg9sa.blu.livefilestore.com/y1p-e4VCYWQ3UOcd7b1JNXaLF_r_XND6IDlo4N0I3FbllN53UhmcKlrYST8B6fdkqMoe1sQhbcrc4RCDE7EggVNbsE9C0JOE3_Q/winform%20border.png?psid=1

    注:ListBox中只写了一个MaskedTextBox

    我想知道你所指的winform固定边框是否为图中所标记的部分?因为WindowsFormsHost本身并没有边框,我们看到的边框应该是ListBox或者说是WindowsFormsHost中所保存的控件的边框。

    如果是这种情况的话,我们可以用控件的BorderStyle属性来去掉这个边框,

    listbox.BorderStyle = BorderStyle.None;
    

    得到的效果为

    http://pvg9sa.blu.livefilestore.com/y1p1ol83wgkXbbwPpOUwWYBn4WrwYrQNCRWrs4TM8DMgaREKwfzGv2HTORT01V_fU-BJWJU9E834XN4LgNkAfiNvGKoL_tVMd2L/winform%20NO%20border.png?psid=1

     同时,在winform程序中,请开启winform的VisualStyles,这样控件的外形就不会为经典样式了。

    Application.EnableVisualStyles();
    

     

    希望这条信息能够对你有所帮助。如果这不是你所遇到的情况,请让我知道。

    致,

     


    Yves Zhang [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年1月20日 4:25
    版主

全部回复

  • 很遗憾,由于"AirSpace"的原因, 你的需求是无法满足的,屏幕上一个有且只有一种技术可以去绘制他,所以这就有了"AirSpace"问题,Winform控件加入要透明,那么那些被透明的像素就无法规定属于哪种技术了,所以规定了一透明就把内容都看不见的: http://msdn.microsoft.com/zh-cn/library/aa970688.aspx

    不过我记得在 WPF Programming 这本书里面好像有个实现方法的,记不清了,需要查下。。。


    Best day, Best life
    2011年1月18日 17:16
  • 孤单的树,

    你好!首先感谢Jarrey作出的答案!

    根据我的理解,你是想要实现WPF中用WindowsFormsHost寄宿winform控件,并且隐藏winform的固定边框。

    按照你的描述我尝试写了一段代码,在WPF窗体程序中,用WindowsFormsHost保存了一个winform中ListBox,我得到的UI如下图所示

    http://pvg9sa.blu.livefilestore.com/y1p-e4VCYWQ3UOcd7b1JNXaLF_r_XND6IDlo4N0I3FbllN53UhmcKlrYST8B6fdkqMoe1sQhbcrc4RCDE7EggVNbsE9C0JOE3_Q/winform%20border.png?psid=1

    注:ListBox中只写了一个MaskedTextBox

    我想知道你所指的winform固定边框是否为图中所标记的部分?因为WindowsFormsHost本身并没有边框,我们看到的边框应该是ListBox或者说是WindowsFormsHost中所保存的控件的边框。

    如果是这种情况的话,我们可以用控件的BorderStyle属性来去掉这个边框,

    listbox.BorderStyle = BorderStyle.None;
    

    得到的效果为

    http://pvg9sa.blu.livefilestore.com/y1p1ol83wgkXbbwPpOUwWYBn4WrwYrQNCRWrs4TM8DMgaREKwfzGv2HTORT01V_fU-BJWJU9E834XN4LgNkAfiNvGKoL_tVMd2L/winform%20NO%20border.png?psid=1

     同时,在winform程序中,请开启winform的VisualStyles,这样控件的外形就不会为经典样式了。

    Application.EnableVisualStyles();
    

     

    希望这条信息能够对你有所帮助。如果这不是你所遇到的情况,请让我知道。

    致,

     


    Yves Zhang [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年1月20日 4:25
    版主
  • Yves.Z 版主,多谢你的帮助!哈哈

    我们的问题解决啦! ^_^

    2011年1月21日 1:40