我有一个网格,我正在尝试连接可见性转换器。我在HelperObjects命名空间中设置了一个类,但由于某种原因,xaml没有获取引用。错误消息是“资源BoolToVisConverter无法解析”为什么xaml不会拉入此资源?我相信我在做一些荒谬的事情......
这是xaml:
xmlns:HelperObjects="clr-namespace:foo.HelperObjects"
...
<Grid Visibility="{Binding isZoneTwoVisible, Converter={StaticResource BoolToVisConverter}}">
答案 0 :(得分:2)
错误消息表明无法找到您尝试绑定的密钥BoolToVisConverter
标识的资源。
最可能的解释是,您尚未在xaml可以访问的范围内声明该资源。您希望创建一个StaticResource
,其密钥与您引用的名称相匹配,在您的xaml的Resources
部分内,具体位置可能会因您的需求/结构而异
假设您在Window
内执行此操作,您可以执行以下操作:
<Window>
<Window.Resources>
<BooleanToVisibilityConverter x:Key="BoolToVis"/>
</Window.Resources>
<Grid Visibility="{Binding isZoneTwoVisible, Converter={StaticResource BoolToVis}}">
<--...Content...-->
</Grid>
</Window>
注意:我还没有在BooleanToVisibilityConverter
前面包含您的命名空间,因为这是一个already exists在框架内的类。
您可能需要稍微不同的行为,或者无法访问该类,在这种情况下,您可能需要在定义资源时添加命名空间,例如: <HelperObjects:BooleanToVisibilityConverter x:Key="BoolToVis"/>
有关静态资源的潜在有用的进一步信息:https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/staticresource-markup-extension
答案 1 :(得分:0)
尝试在UserControlResources甚至父级网格资源中指定转换器。假设您正在使用UserControl。 并且您的代码不清楚您定义StaticResource BoolToVisConverter的位置。但一般来说就是这个过程。
请查看下面的示例代码,以在UserControl Resources部分中定义StaticResorce。确保设置isZoneTwoVisible所在的 DataContext 。我希望你实现的是ImplementINotifyPropertyChanged,并且你的isZoneTwoVisible或isZoneTwoVisible上的PropertyChanged是DependencyProperty。 注意: BooleanToVisibilityConverter是一个实现IValueConverter的类,或者如果您的属性是bool,您甚至不需要该类。
<UserControl.Resources>
<BooleanToVisibilityConverter
x:Key="boolToVisibility"></BooleanToVisibilityConverter>
</UserControl.Resources>
你做了上面提到的所有事情并且它仍然没有工作,有时我指定相对Source希望它驻留在UserControl中。
Visibility="{Binding isZoneTwoVisible,Converter={StaticResource boolToVisibility},RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=UserControl}}">