2012-02-07 17 views
1

バウンド文字列(C#の)上で使用する場合の簡単なコンバータは動作させることはできません:は、私は以下のコンバータが定義されている

class BodyValueConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     string s = value.ToString(); 
     int prefixLength; 
     if (!int.TryParse(parameter.ToString(), out prefixLength)) 
      return s; 
     return s.Substring(0, prefixLength); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotSupportedException(); 
    } 
} 

これは、渡された文字列の先頭から開始しますと量を返します。私がパラメータとして指定する文字の数。私は、コンバータインスタンス化している私のXAMLで

<DataTemplate x:Key="AppointmentTemplate"> 
    <StackPanel Orientation="Horizontal"> 
     <TextBlock Text="{Binding Subject}"></TextBlock> 
     <TextBlock Text="{Binding Path=Subject, Converter={StaticResource BodyValueConverter}, ConverterParameter=1}"></TextBlock> 
    </StackPanel> 
</DataTemplate> 

エラーは次のとおりです:

XAMLParseException: Provide value on 'System.Windows.Markup.StaticResourceHolder' threw an exception.

TextBlock内のこのコンバータを使用しようとして

<local:BodyValueConverter x:Key="BodyValueConverter"/> 

私はエラーを取得します

最初のテキストブロックは、件名を表示するのに問題ありません。 2行目は私に例外を与えるものです。

+3

XAMLでのオブジェクトの順序は何ですか?コンバーターは実際に使用する前に定義する必要がありますので、コンバーターが 'Resources'の' DataTemplate'の上にあるか、 'StaticResource'の代わりに' DynamicResource'を使うようにしてください – Rachel

+0

パーフェクトレイチェル!!それをソートしました!リソースの順序が正直であるとは思わなかった、私はそれを学んだことがうれしい。どうもありがとう。私は受け入れることができるように答えとして投稿するかもしれない? – SkonJeet

+0

答えとして投稿しました:) – Rachel

答えて

4

XAMLでのオブジェクトの順序は何ですか?

Converterが実際に使用する前に定義する必要がありますDynamicResourceであるため、ので、あなたの<Converter>があなたのResources

でのご<DataTemplate>別の選択肢を上回っていることを確認しすると、DynamicResource代わりのStaticResourceを使用するように切り替えることですXAMLがロードされているときではなく、必要なときに評価されます。

+0

ソート済み。ありがとう。 – SkonJeet

1

このエラーは、通常、探している静的リソースが見つからない場合にスローされます。静的リソースに定義する必要があります。

<Window 
    .... snip ... 
    xmlns:local="clr-namespace:YourLocalNamespace" 
    <Window.Resources> 
    <local:BodyValueConverter x:Key="BodyValueConverter"/> 
    </Window.Resources> 
    .... snip .... 
    <DataTemplate x:Key="AppointmentTemplate"> 
    <StackPanel Orientation="Horizontal"> 
     <TextBlock Text="{Binding Subject}"></TextBlock> 
     <TextBlock Text="{Binding Path=Subject, Converter={StaticResource BodyValueConverter}, ConverterParameter=1}"></TextBlock> 
    </StackPanel> 
    </DataTemplate> 
</Window> 

注:これは、ウィンドウで定義するときです。あなたは他の場所でそれを定義することができます。

これは問題ではない場合は、解析エラーの詳細については、内側の例外テキストを確認してください。

+0

これは単に自分のリソースの順序になっていました。とにかくお返事いただきありがとうございます。 – SkonJeet

+0

ええ、それは理にかなっています。それはまだ定義されていません。 – scottheckel

+0

私のXAMLの注文に関して必要な情報を提供していないのは悪いです。 – SkonJeet

関連する問題