无法弄清楚如何设置静态资源

时间:2018-02-23 20:41:46

标签: c# wpf

我有一个网格,我正在尝试连接可见性转换器。我在HelperObjects命名空间中设置了一个类,但由于某种原因,xaml没有获取引用。错误消息是“资源BoolToVisConverter无法解析”为什么xaml不会拉入此资源?我相信我在做一些荒谬的事情......

这是xaml:

 xmlns:HelperObjects="clr-namespace:foo.HelperObjects"

    ...

   <Grid Visibility="{Binding isZoneTwoVisible, Converter={StaticResource BoolToVisConverter}}">

2 个答案:

答案 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}}">
相关问题