Wpf 运行时错误:找不到InverseBoleAnConverter

Wpf 运行时错误:找不到InverseBoleAnConverter,wpf,styles,Wpf,Styles,我在尝试遵循以下建议时遇到问题: 当我与ResourceDictionary一起使用时,它会给出运行时错误。找不到反向变压器 XMAL如下所示: <UserControl x:Class="SMTF.MasterDataView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

我在尝试遵循以下建议时遇到问题:

当我与ResourceDictionary一起使用时,它会给出运行时错误。找不到反向变压器

XMAL如下所示:

<UserControl x:Class="SMTF.MasterDataView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:SMTF" mc:Ignorable="d" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" d:DesignHeight="466" d:DesignWidth="483">
<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="../AppResource.xaml" />
            <ResourceDictionary Source="../DefaultStyle.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>
    <Grid>
    <StackPanel  HorizontalAlignment="Left" Margin="200,12,0,0" Name="stkMain" VerticalAlignment="Top" >
        <Grid Margin="4">
            <ContentControl Visibility="{Binding IsChecked, ElementName=VisibilityToggle, Converter={StaticResource InverseBooleanConverter}}" >
                <Border Grid.Column="2" Style="{StaticResource MainBorderStyle}">
                    <HeaderedContentControl   Content="{Binding Path=WorkspaceView}" ContentTemplate="{StaticResource WorkspacesTemplate}" Header="View" Style="{StaticResource MainHCCStyle}"/>
                </Border>
            </ContentControl>
        </Grid>
        <Grid DockPanel.Dock="Bottom" Margin="0,2,4,2">
            <TextBlock HorizontalAlignment="Right">

               <ToggleButton  x:Name="VisibilityToggle" Focusable="False" Style="{StaticResource SMToggle}"  Command ="{Binding ShowNew}" >

                </ToggleButton>
               <!--<ToggleButton x:Name="VisibilityToggle"   Background="Transparent" Command ="{Binding ShowNew}" >
                     <Image Source="/Image/Add.png"  Width="24" />
                </ToggleButton>-->
            </TextBlock>

        </Grid>

        <Grid Margin="4">
            <ContentControl Visibility="{Binding IsChecked, ElementName=VisibilityToggle, Converter={StaticResource BoolToVisibility}}" >
            <Border Grid.Column="2" Style="{StaticResource MainBorderStyle}">
                <HeaderedContentControl  Content="{Binding Path=WorkspaceEdit}" ContentTemplate="{StaticResource WorkspacesTemplate}" Header="Configure" Style="{StaticResource MainHCCStyle}"/>
            </Border>
            </ContentControl>
        </Grid>
    </StackPanel>

</Grid>
</UserControl>
在AppResourceXML中

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:vm="clr-namespace:SMTF">
 <vm:InverseBooleanConverter x:Key="InverseBoolToVisibility" /> 
 .....
 .....
</ResourceDictionary>

.....
.....
提前谢谢
NS

您使用的密钥不正确。您的资源密钥是
inversebooltovibility
,而您使用了InverseBooleanConverter作为密钥

更改资源密钥以将正确的资源引用为

<ContentControl Visibility="{Binding IsChecked, ElementName=VisibilityToggle, Converter={StaticResource InverseBoolToVisibility}}" >

样式相关绑定的转换器的另一种选择是使用style.Triggers,下面显示了当复选框IsChecked=false时的画布,否则将需要InverseBoleAnConverter

<Canvas x:Name="Overlay">
    <Canvas.Style>
        <Style TargetType="Canvas">
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsChecked, ElementName=MyCheckbox}" Value="True">
                    <Setter Property="Visibility" Value="Collapsed" />
                </DataTrigger>
                <DataTrigger Binding="{Binding IsChecked, ElementName=MyCheckbox}" Value="False">
                    <Setter Property="Visibility" Value="Visible" />
                </DataTrigger>                                
            </Style.Triggers>
        </Style>
    </Canvas.Style>
    <Rectangle Canvas.ZIndex="3" Fill="#99333333" Height="25" Stroke="Transparent" Width="293" Canvas.Left="10" Canvas.Top="-25"/>
</Canvas>


请分享您尝试过的代码/xaml。如何定义转换器以及如何引用it@nit我已经添加了所需的信息,谢谢。转换器类有什么问题吗?或者我必须使用的任何附加代码?我得到的是targetType不是布尔错误!如果答案的xaml在usercontrol中,而convert在mainWindowViewModel中呢?一个怎么能看到另一个?我尝试使用祖先类型,但它不起作用。我正在寻找一个只有xaml的解决方案,就是这样!
public class InverseBooleanConverter: IValueConverter
{
    #region IValueConverter Members

    public object Convert(object value, Type targetType, object parameter,
        System.Globalization.CultureInfo culture)
    {
        if (targetType != typeof(Visibility))
            throw new InvalidOperationException("The target must be a boolean");

        if(!(bool)value)
        {
            return Visibility.Visible;
        }
        return Visibility.Collapsed;
    }

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

    #endregion
}
<Canvas x:Name="Overlay">
    <Canvas.Style>
        <Style TargetType="Canvas">
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsChecked, ElementName=MyCheckbox}" Value="True">
                    <Setter Property="Visibility" Value="Collapsed" />
                </DataTrigger>
                <DataTrigger Binding="{Binding IsChecked, ElementName=MyCheckbox}" Value="False">
                    <Setter Property="Visibility" Value="Visible" />
                </DataTrigger>                                
            </Style.Triggers>
        </Style>
    </Canvas.Style>
    <Rectangle Canvas.ZIndex="3" Fill="#99333333" Height="25" Stroke="Transparent" Width="293" Canvas.Left="10" Canvas.Top="-25"/>
</Canvas>