2013-02-25 38 views
2

我想一类的特定实例添加到页面的资源,然后使用该类作为一个转换器,所以在我的页面构造我把:从代码到网页资源加入转炉背后

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

然后绑定到它是这样的:

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

,但我不断收到此异常:

提供有关“System.Windows.Markup.Sta值ticResourceHolder'抛出了一个 异常。

我对WPF有点新,任何意见,将不胜感激。

回答

3

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

两个建议:

  1. 请确保您的通话之前添加资源的InitializeComponent()。
  2. 尝试将其切换为动态资源。
+0

我没试过InitialiseComponent()之前加入的话,会尽力,需要更多的阅读起来关于动态资源。感谢您的回复 – 2013-02-27 05:59:04

+0

您的第一个建议是我的错误,谢谢! – 2013-03-03 04:30:46

0

您可以在页面的资源部分中声明您想使用的Converter,如下例所示。 (我建议你在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> 
+0

“我建议你在XAML中声明转换器,而不是代码隐藏。”为什么? – 2013-02-25 19:35:54

+1

“分离问题”和可维护性:) – Shrinand 2013-02-25 19:55:06

+0

我通常将App.xaml中的转换器声明为'全局'资源,在这种情况下,后面的代码是必需的 – 2013-02-27 05:58:03