设计时无法在Blend 3中找到我的转换器/资源。(WPF)

3
我在使用Blend与我的Visual Studio解决方案时遇到了问题。
在运行时和编译时一切都很好。
正如您在图片中所看到的,Blend要求我构建项目,但即使成功构建、重新构建、清理和构建后,情况仍然没有改变,UI仍然被设计师阻止。
有什么想法吗?

alt text

编辑:修正了拼写错误,问题仍然存在。

转换器代码:

namespace BlendTest
{
    public class TestConvert : IValueConverter
    {
        #region IValueConverter Members

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return ((bool)value) ? Visibility.Visible : Visibility.Collapsed;
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }

        #endregion
    }  
}      



<Window
  x:Class="XP2Win7.UserInterface.ImageViewer.MainView.MainWindow"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:local="clr-namespace:BlendTest"
  WindowState="Maximized"
  WindowStartupLocation="CenterScreen"
  Background="Transparent"
  Title="Test">
    <Window.Resources>
        <local:TestConvert x:Key="TestConvert"/>
    </Window.Resources>
    <Grid x:Name="RootLayout" >
        <TextBlock Text="Hello" Visibility="{Binding IsMargol, Converter={StaticResource TestConvert}}" FontSize="48" FontWeight="Bold" />
    </Grid>
</Window>

感谢 Ariel


你能添加XAML声明,包括你的命名空间、使用此转换器的任何控件的声明吗? - Reed Copsey
当然。完成了。已经删除了另一个转换器,这样更容易跟进。关于TestConvert问题仍然存在。 - ArielBH
我在这一点上编辑了我的答案,并给出了我最好的猜测。 - Reed Copsey
根据您提供的内容,一切应该都可以正常工作(在我的测试解决方案中确实如此)。您能否创建一个测试项目,使用与您在问题中相同的窗口,并确认它是否会使MS Expression Blend 3设计器崩溃?您能分享错误屏幕截图吗?当前的屏幕截图看起来不像是从这段代码中获取的...也许最重要的部分被忽略了? - Anvaka
@anvaka,我知道,我已经在那件事上浪费了大量的时间。 我之所以首先使用TestConvert是因为我从一段可用的代码开始,并尝试将其集成到我的现有大型解决方案(31个项目)中,并查看何时开始出现故障。 - ArielBH
我在使用Visual Studio 2010时遇到了同样的问题。我添加了ConvertBack函数的实现(而不是抛出NotImplementedException),重启了IDE,最后错误神奇地消失了。我不需要为我的自定义控件或转换器使用单独的类库。 - SliverNinja - MSFT
4个回答

0

这个答案对我有帮助:我将“平台目标”重置为“任何 CPU”。


0

嗯,虽然问题的原因我仍不清楚。

解决混乱的方法如下:

  1. 我创建了一个新的代码库项目,并将所有控件和转换器移动到那里。

  2. 我使用XmlnsDefinition属性来装饰程序集,使每个程序集对应相同的命名空间。

  3. 修复所有引用。

就这样。

Ariel


0

对我有用的是什么?

将生成输出路径从bin / x86 / Debug更改为bin / Debug对我有用。 但仍然没有任何意义,因为我的平台目标设置为“x86”。 因此,我决定更深入地研究这个问题,并发现下拉菜单中的平台选择“x86”并未反映项目配置文件中设置的“值”。

我在VS中卸载了项目,在编辑器中打开了.csproj文件,以查看“平台”的值是什么。 令我惊讶的是,它被设置为“任何CPU”,而构建选项下的下拉菜单显示为“x86”。 我所做的就是手动编辑.csproj文件以读取“x86”。

以下是解决步骤:

  • 右键单击VS项目
  • 卸载
  • 右键单击并编辑.csproj文件
  • 确保“平台”设置正确

0

看起来你的 XAML 中有拼写错误:

Alubm 应该是 AlbumBlentTest 应该是 BlendTest

我猜这些错误实际上是编译器错误,纠正上述两个拼写错误很可能会“修复”设计师。


编辑:

我认为最有可能的情况是您的转换器在XAML文件所在的项目之外(但在同一解决方案中)。 如果是这种情况,请确保在XAML声明中指定程序集,并确保正确引用了另一个项目(即BlendTest)。 例如:

xmlns:local="clr-namespace:BlendTest;assembly:BlendTest"

如果您引用了在不同项目中定义的类型(带有命名空间),则还需要存在程序集引用。

不,这些错别字足够一致,可以编译 :) - ArielBH
它没有成功编译。它在窗口底部显示了您 XAML 文件中的实际编译错误。 - Reed Copsey
这是问题的一部分。Visual Studio 编译没有问题,Blend 编译也没有问题(输出窗口显示“构建已成功完成”)。 - ArielBH
你参考的转换器是否是以公共可见性创建的?如果它们是私有的,可能会在设计器中引起问题。 - Reed Copsey
1
你能否编辑你的问题,包括XAML代码,命名空间部分和出错的行?没有这些信息,我们无法进一步调试。 - Reed Copsey
不,它在同一个项目上。 - ArielBH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接