当我处理按钮模板时,我刚遇到绑定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}" />
但绑定并没有像我预期的那样有效。图像无法正确显示。如果我将图像全名放在ToolTip中,那么它的工作正确。看起来StringFormat已被忽略。
任何帮助将不胜感激。提前谢谢。
感谢dbaseman的回复。我知道我可以使用Converter实现它。但正如我认为StringFormat更容易应用,这就是我尝试这个的原因。
我在这里也找到了回复,它说 - 绑定到字符串属性时使用StringFormat,而控件中的Text属性是object类型,因此会忽略StringFormat。
它应该是设计的。下面的代码工作。因为Text属性是字符串类型。
<TextBlock Text="{Binding ToolTip, RelativeSource={RelativeSource Self}, StringFormat={}Images/{0}-Normal.png}" ToolTip="Minimize" />
答案 0 :(得分: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}}" />
编辑我认为这是设计的。来自docs for BindingBase.StringFormat:
获取或设置一个字符串,该字符串指定如果将绑定值显示为字符串,如何格式化绑定。
所以(显然)除非将绑定源实际呈现为文本字符串,否则不会发生字符串格式转换。