日期:2014-05-17  浏览次数:21015 次

WPF,如何更好地使用dll中的自定义窗体
创建了一个自定义控件的dll类库,有一个继承自Window的自定义MyWindow,生成之后,在另一个项目中添加引用和命名空间。

<xj:MyWindow x:Class="WPF熊俊2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"
        xmlns:xj="clr-namespace:MyControl;assembly=MyControl"
        xmlns:local="clr-namespace:WPF熊俊2">
    <Grid/>
</xj:MyWindow>



现在的问题是这样的:
在没有编译之前,VS中的窗体还是默认的Window样式,这使得很难继续操作,比如往窗口拖控件的时候,或者调整布局的时候,根本看到的就不是自定义的MyWindow(窗体样式已完全不同于默认的Window),很难掌控,只有编译之后,才能看到真正的样子。

请问,对于这种情况,你们是怎么处理的?难道就不使用dll了吗,直接在项目中写窗体样式吗?

------解决方案--------------------
我们基本上在xaml里面布局 不用ui拖控件。。。。。
所以看不到窗体的真实状态也无所谓
------解决方案--------------------
VS是支持设计窗体和XAML同时显示的啊,并且一边写XAML是不拖控件的因为那样很难把控位置,都是自己写XAML代码的,并且切换到设计窗口可以立即看到控件的位置的,如果你那边不可以应该就是环境问题了,修复下VS再试试
------解决方案--------------------
我这边是实时显示真实的窗体样式,没异常。不知道你的VS版本,顺便问下“WPF熊俊”是引自哪里?默认项目不可能用这名字,但是多出看到有人用“WPF熊俊”做解决方案名
------解决方案--------------------
    public class MyWindow : UserControl
    {
        static MyWindow()
        {
            DefaultStyleKeyProperty.OverrideMetadata(typeof(MyWindow), new FrameworkPropertyMetadata(typeof(MyWindow)));
        }
    }

也许你这里没有继承UserControl,相信只要继承UserControl,没有显示不了的东西。WPF做控件,基本都是在UserControl的基础上设计的,其它的Control都不带设计视图。同时UserControl本身就无所不能,窗体、页、控件都可以实现,功能是一样的。