重用Working Window和helper类时出现WPF XAML命名空间问题

时间:2018-04-05 22:37:14

标签: c# wpf xaml

我有一个WPF Window类,它使用一个本地(在同一命名空间中)类来从ViewModel关闭Window。我从另一个项目中复制了这个类,它工作得很好,并且适当地更改了名称空间。我正在获得一个设计器并使用VS编译错误,该类在命名空间中不存在。这是我的Xaml:

Interactable

这是DialogCloser类:

<Window x:Class="MOABIMTools.Views.CreateTypesView"
    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:xc="clr-namespace:MOABIMTools"
    xmlns:local="clr-namespace:MOABIMTools.Views"
    local:DialogCloser.DialogResult="{Binding DialogResult}"
    Title="BIM Parameter Maintenance" Height="500" Width="1000">

我已经清理并重建,通过复制/粘贴重置xaml中的命名空间引用,关闭VS并重新启动,并从xc namesapce更改为本地,没有任何帮助。我只是没有看到错误。但是我在Xaml文件中的DialogCloser绑定行下得到蓝色波浪线以及编译错误:

using System.Windows;

namespace MOABIMTools.Views
{
    public static class DialogCloser
    {
        public static readonly DependencyProperty DialogResultProperty =
            DependencyProperty.RegisterAttached(
                "DialogResult",
                typeof(bool?),
                typeof(DialogCloser),
                new PropertyMetadata(DialogResultChanged));

        private static void DialogResultChanged(
            DependencyObject d,
            DependencyPropertyChangedEventArgs e)
        {
            var window = d as Window;
            if (window != null)
                window.DialogResult = e.NewValue as bool?;
        }
        public static void SetDialogResult(Window target, bool? value)
        {
            target.SetValue(DialogResultProperty, value);
        }
    }
}

我觉得错误必须是简单的,因为窗口和DialogCloser类都来自另一个工作项目。但我没有看到问题。

1 个答案:

答案 0 :(得分:0)

DialogCloser位于namespace MOABIMTools.Views,但在您的xaml中,您设置xmlns:xc="clr-namespace:MOABIMTools",然后使用xc:DialogCloser.DialogResult调用它。

我认为你需要改变的是替换

xmlns:xc="clr-namespace:MOABIMTools"

xmlns:xc="clr-namespace:MOABIMTools.Views"

你在设计过程中没有得到错误的原因,可能是因为它使用了旧的编译对象。尝试重建一切。