0

当我处理按钮模板时,我刚刚遇到了绑定 StringFormat 问题。这里是。

-- 我设置了一个带有给定工具提示的按钮作为字符串。我喜欢用它来指定绑定中的图像名称。然后我将它应用到一个名为 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}" />

但是绑定没有像我预期的那样工作。图像无法正确显示。如果我将图像全名放在 ToolTip 中,那么它就可以正常工作。看起来 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

这很有趣——我不确定这是一个错误,还是设计使然。不过,您可以通过使用 aConverter而不是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的文档:

获取或设置一个字符串,该字符串指定在绑定值显示为字符串时如何格式化绑定。

So (apparently) the string-format conversion won't happen unless the binding source is to actually be rendered as a text string.

于 2012-12-01T06:00:48.110 回答