首页 > 解决方案 > 找不到转换器的资源

问题描述

我正在尝试切换窗口的可见性。我已经将一个布尔对象绑定到我的 ViewModel 并有一个转换器来处理可见性切换。该项目将运行,但会立即出现异常“找不到名为'VisibilityConverter'的资源”。

我的 Windows.Resources xml 中的其他转换器可以很好地找到和使用。为什么找不到这个?知道我做错了什么吗?

Window x:Class="MyProject.Views.ControlPanel"
Height="650" Width="805" MinWidth="805"
Visibility="{Binding ControlPanelWindowBo.IsWindowVisible, Converter={StaticResource VisibilityConverter}}">

    <Window.Resources>
        <converters:BoolToIconConverter x:Key="BoolToIconConverter" />
        <converters:BoolHomeTeamPossessionConverter x:Key="BoolHomeTeamPossessionConverter" />
        <converters:BoolVisitorTeamPossessionConverter x:Key="BoolVisitorTeamPossessionConverter" />
        <converters:VisibilityConverter x:Key="VisibilityConverter" />
    </Window.Resources>

标签: c#xamlmvvm

解决方案


这是因为VisibilityConverter定义的级别(窗口级别)太深了。

您应该在您的中app.xaml定义它并将其定义为应用程序资源:

<Application x:Class="stuff.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
         <ResourceDictionary>
             <converters:VisibilityConverter x:Key="VisibilityConverter" />
             ...and others.
         </ResourceDictionary>
    </Application.Resources>
</Application>

推荐阅读