2

我想将一个类的特定实例添加到页面的资源中,然后将该类用作转换器,所以在我的页面构造函数中我输入:

this.Resources.Add("converterASD", new ASDConverter());

然后像这样绑定到它:

<ListBox ItemsSource="{Binding Converter={StaticResource converterASD}}"/>

但我不断收到此异常:

在“System.Windows.Markup.StaticResourceHolder”上提供值引发了异常。

我对 WPF 有点陌生,任何建议都将不胜感激。

4

2 回答 2

3

我们可以使用异常中的更多信息。

两个建议:

  1. 确保在调用 InitializeComponent() 之前添加资源。
  2. 尝试将其切换为动态资源。
于 2013-02-25T18:55:45.323 回答
0

您可以在页面的资源部分中声明要使用的转换器,如下例所示。(我建议您在 XAML 中而不是在代码隐藏中声明转换器)

例子:

<UserControl x:Class="Views.ConverterExample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable="d" d:DesignHeight="300"
        d:DesignWidth="300">
    <UserControl.Resources>
        <BooleanToVisibilityConverter x:Key="BoolToVisibilityConverter" />
    </UserControl.Resources>
    <Grid>
        <CheckBox x:Name="VisibilityController" IsThreeState="False" />
        <ListBox
            Visibility="{Binding ElementName=VisibilityController, Path=IsChecked,Converter={StaticResource BoolToVisibilityConverter}}"
            Height="100" Width="100" BorderBrush="Red" BorderThickness="1" />
    </Grid>
</UserControl>
于 2013-02-25T19:25:24.510 回答