0

ボタン テンプレートで作業しているときに、バインディング StringFormat の問題が発生しました。ここにあります。

-- 特定の ToolTip を文字列としてボタンを設定しました。バインディング内で画像名を指定するために使用するのが好きです。次に、これを ImageButton というボタン スタイルに適用します。

<Button ToolTip="Minimize" Height="34" Style="{StaticResource ImageButton}"  Margin="220,36,125,371" />;

-- これはスタイルのコードです。バインディングのイメージ名を使用して、完全なイメージ パスを作成するのが好きです。このように動作するはず<Image x:Name="ButtonImage" Source="Images/Minimize-Normal.png" />です。はい、私はそのような画像を配置しており、バインドせずに xml コードを配置するだけでうまく機能します。

<Image x:Name="ButtonImage" Source="{Binding ToolTip, RelativeSource={RelativeSource TemplatedParent}, StringFormat={}Images/{0}-Normal.png}" />

しかし、バインディングは期待どおりに機能しませんでした。画像が正しく表示されません。ツールチップに画像の完全な名前を入力すると、正しく機能しました。StringFormat が無視されたようです。

どんな助けでも大歓迎です。前もって感謝します。


dbaseman の応答に感謝します。私は Converter を使用してそれを達成できることを知っています。しかし、StringFormat の方が適用しやすいと思うので、これを試してみました。

また、ここで返信を見つけました-文字列プロパティにバインドするときにStringFormatが使用されますが、コントロールのTextプロパティはオブジェクト型であるため、StringFormatは無視されます。


それは設計によるものです。以下のコードは機能します。Text プロパティは文字列型であるためです。

<TextBlock Text="{Binding ToolTip, RelativeSource={RelativeSource Self}, StringFormat={}Images/{0}-Normal.png}" ToolTip="Minimize" />
4

1 に答える 1

0

興味深いですね。これがバグなのか、仕様によるものなのかはわかりません。Converterただし、 の代わりに を使用することで、この問題を回避できますStringFormat

public class ImageNameConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return string.Format("Images/{0}-Normal.png", value);
    }

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

そしてもちろん:

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

と:

<Image x:Name="ButtonImage" 
    Source="{Binding ToolTip, 
                RelativeSource={RelativeSource TemplatedParent}, 
                Converter="{StaticResource ImageNameConverter}}" />

編集それは設計によるものだと思います。BindingBase.StringFormatのドキュメントから:

バインドされた値を文字列として表示する場合にバインディングをフォーマットする方法を指定する文字列を取得または設定します。

そのため、バインディング ソースが実際にテキスト文字列としてレンダリングされない限り、(明らかに) 文字列形式の変換は行われません。

于 2012-12-01T06:00:48.110 に答える