2

コンバーター BoolToStringConverter を作成しました。コンバーターには、TrueString と FalseString の 2 つのプロパティがあります。XAMLで使用した方法は次のとおりです

<UserControl.Resources>
    <local:BooleanToStringConverter x:Key="BooleanToStringConverter" TrueString="{Binding Strings.Open, Source={StaticResource MyStrings}}"></local:BooleanToStringConverter>
</UserControl.Resources>

これは正常にコンパイルされますが、実行時に xml 解析例外が発生します。TrueString プロパティの設定を TrueString = "Open" に変更すると、すべて正常に動作します。

使用されているコンバーターは次のとおりです。

<Button x:Name="MyButton" Content="{Binding Path=IsOpen, Converter={StaticResource BooleanToStringConverter}}" Command="{Binding MyCommand}" VerticalAlignment="Top" Style="{StaticResource MyStyle}" Margin="0,2,10,2"/>

何が間違っているのですか?私がやりたいことは、ローカル リソースのプロパティをローカライズされた値に設定することだけです。

編集ここに私のコンバータークラスがあります

public class BooleanToStringConverter : IValueConverter
{
    public BooleanToStringConverter()
    {
    }

    public string TrueString
    {
        get;
        set;
    }

    public string FalseString
    {
        get;
        set;
    }

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        bool boolValue = System.Convert.ToBoolean(value, CultureInfo.InvariantCulture);

        return boolValue ? TrueString : FalseString;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }     
}

実行時例外メッセージは次のとおりです。

タイプ 'System.Windows.Markup.XamlParseException' の初回例外が System.Windows.dll で発生しました

追加情報: プロパティ 'Optimize.Client.Presentation.BooleanToStringConverter.FalseString' を設定すると、例外がスローされました。[ライン: 18 ポジション: 86]

4

2 に答える 2

1

TrueStringおよびFalseStringプロパティにバインドすることはできません。MSDN ヘルプから:

バインディングのターゲットになるためには、プロパティが依存プロパティである必要があります

xaml のバインディングの ConverterParameter 部分を使用してみることができます

<Button x:Name="MyButton" Content="{Binding Path=IsOpen, Converter={StaticResource BooleanToStringConverter}, ConverterParameter=Open}" 
        Command="{Binding MyCommand}" VerticalAlignment="Top" 
        Style="{StaticResource MyStyle}" Margin="0,2,10,2"/>

コンバーターの汎用性を低くして、Open/Close 文字列のみを処理することもできます。

もう 1 つのオプションは、値コンバーターで DependencyObject を拡張し、プロパティを DependencyProperties に変換することです。

于 2012-06-27T22:08:20.153 に答える
0

次のように、XAML でパブリック プロパティを設定することもできます。

<localHelpers:BoolToTextConverter x:Key="boolToTextConverter">
    <localHelpers:BoolToTextConverter.TrueText>
        Sent
    </localHelpers:BoolToTextConverter.TrueText>
    <localHelpers:BoolToTextConverter.FalseText>
        Not Sent
    </localHelpers:BoolToTextConverter.FalseText>
</localHelpers:BoolToTextConverter>

完全な例は、こちらのブログ投稿にあります。

于 2013-08-19T16:46:22.543 に答える