Wpf 带有绑定字符串格式问题的自定义按钮模板

Wpf 带有绑定字符串格式问题的自定义按钮模板,wpf,binding,string-formatting,Wpf,Binding,String Formatting,在处理按钮模板时,我遇到了绑定字符串格式问题。给你 --我设置了一个按钮,将给定的工具提示设置为字符串。我喜欢用它来指定绑定中的图像名称。然后我将其应用于一个名为ImageButton的按钮样式 <Button ToolTip="Minimize" Height="34" Style="{StaticResource ImageButton}" Margin="220,36,125,371" />; ; --这是样式中的代码。我喜欢使用绑定中的图像名称,并提供完整的图像路径。它

在处理按钮模板时,我遇到了绑定字符串格式问题。给你

--我设置了一个按钮,将给定的工具提示设置为字符串。我喜欢用它来指定绑定中的图像名称。然后我将其应用于一个名为ImageButton的按钮样式

<Button ToolTip="Minimize" Height="34" Style="{StaticResource ImageButton}"  Margin="220,36,125,371" />;
--这是样式中的代码。我喜欢使用绑定中的图像名称,并提供完整的图像路径。它应该是这样工作的,
。是的,我确实有这样一个映像,如果我只是在没有绑定的情况下放置xml代码,它将非常有用

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

但是装订并没有像我预期的那样有效。图像无法正确显示。如果我把图像全名放在工具提示中,那么它工作正常。看起来StringFormat已被忽略

任何帮助都将不胜感激。提前谢谢


感谢dbaseman的回复。我知道我可以通过使用转换器来实现它。但由于我认为StringFormat更容易应用,所以我尝试了这个方法

我在这里还发现了一个回复,它说-StringFormat在绑定到string属性时使用,而控件中的Text属性是object类型,因此StringFormat被忽略


它应该是设计的。下面的代码起作用。因为文本属性是字符串类型

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

这很有趣——我不确定这是一个bug,还是出于设计。不过,您可以通过使用
转换器
而不是
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}}" />