运行时错误:未找到 InverseBooleanConverter
Posted
技术标签:
【中文标题】运行时错误:未找到 InverseBooleanConverter【英文标题】:Run-time error: InverseBooleanConverter not found 【发布时间】:2013-10-22 21:05:59 【问题描述】:我在尝试遵循以下建议时遇到问题: How to bind inverse boolean properties in WPF?
当我与 ResourceDictionary 一起使用时,它会给出运行时错误。未找到 InverseBooleanConverter。
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>
我使用的是链接中提供的相同代码。 即:
[ValueConversion(typeof(bool), typeof(bool))]
public class InverseBooleanConverter: IValueConverter
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
if (targetType != typeof(bool))
throw new InvalidOperationException("The target must be a boolean");
return !(bool)value;
public object ConvertBack(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
throw new NotSupportedException();
#endregion
在 AppResource XML 中
<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
【问题讨论】:
请分享您尝试过的代码/xaml。您如何定义转换器以及如何引用它 @nit 我已经添加了请求的信息 【参考方案1】:样式相关绑定的转换器的替代方法是使用 Style.Triggers,下面显示了当复选框 IsChecked = false 时的画布,否则将需要 InverseBooleanConverter。
<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 的解决方案,就是这样!【参考方案2】:您使用的密钥不正确。您的资源键是InverseBoolToVisibility
,而您使用 InverseBooleanConverter 作为键。
更改资源键以将正确的资源引用为
<ContentControl Visibility="Binding IsChecked, ElementName=VisibilityToggle, Converter=StaticResource InverseBoolToVisibility" >
您对转换器的实现也是错误的。如果您想根据布尔逆值更改可见性,请将您的转换器代码更新为:
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
【讨论】:
谢谢。转换器类有什么问题吗?或我必须使用的任何附加代码?我收到 targetType not boolean 错误! 如果答案的 xaml 在用户控件中并且在 mainWindowViewModel 中进行转换怎么办?一个人怎么能看到另一个人?我尝试了祖先类型,但它不起作用以上是关于运行时错误:未找到 InverseBooleanConverter的主要内容,如果未能解决你的问题,请参考以下文章
prisma - 运行 graphql 查询时获取环境变量未找到错误消息