1

MicrosoftOutlookのようなウィンドウタイトルを作成したいと思います。

そのために、次のバインディングを作成しました。

<MultiBinding StringFormat="{}{0} - Message ({1})}">
    <Binding ElementName="txtSubject" Path="Text" />
    <Binding ElementName="biSendAsHtml">****</Binding>
</MultiBinding>

次に、2番目のバインディングを条件付きにする方法を知りたいと思います。たとえば、biSendAsHtml.IsChecked等しい場合はHTMLtrueを表示し、そうでない場合はプレーンテキストを表示します。

4

2 に答える 2

2

sa_ddam213の答えがエレガントだと思うかどうかはわかりませんが、怖いだけです。RV1987が提案したように、コンバーターは正しいアプローチですが、はるかに賢くすることができます。

ブール値を取り、それをコンバーター定義で定義されたオプションに変換するコンバーターを作成します。

public class BoolToObjectConverter : IValueConverter
{
    public object TrueValue { get; set; }
    public object FalseValue { get; set; }

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return Convert.ToBoolean(value) ? TrueValue : FalseValue;
    }

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

コンバーターを定義します。

<local:BoolToObjectConverter x:Key="SendAsHtmlBoolToTextConverter"
                             TrueValue="HTML"
                             FalseValue="Plain Text"/>

そしてそれを使用してください:

<MultiBinding StringFormat="{}{0} - Message ({1})}">
    <Binding ElementName="txtSubject" Path="Text" />
    <Binding ElementName="biSendAsHtml" Path="IsChecked"
             Converter="{StaticResource SendAsHtmlBoolToTextConverter}"/>
</MultiBinding>

必要に応じて、TrueValueおよびFalseValueDependencyPropertiesを作成してバインディングをサポートすることもできます。

于 2013-03-07T04:16:08.973 に答える
2

IValueConverterを作成し、2番目のバインディングで使用します-

public class MyConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, 
                            System.Globalization.CultureInfo culture)
    {
        return (bool)value ? "HTML" : "Your Text";
    }

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

XAMLが表示されます-

<MultiBinding StringFormat="{}{0} - Message ({1})}">
    <Binding ElementName="txtSubject" Path="Text" />
    <Binding ElementName="biSendAsHtml" Path="IsChecked"
             Converter="{StaticResource Myconverter}"/>
</MultiBinding>
于 2013-03-03T15:11:28.847 に答える