2013-02-25 64 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