2012-12-01 125 views
0

当我在按钮模板上工作时,我刚刚遇到绑定StringFormat问题。这里是。绑定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}" /> 

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

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


感谢dbaseman的回应。我知道我可以通过使用Converter来实现它。但正如我认为StringFormat更容易应用,这就是为什么我尝试了这一点。

我还在这里找到了答案,它说 - StringFormat用于绑定到字符串属性,而控件中的Text属性是类型对象,因此StringFormat被忽略。


它应该是设计。下面的代码工作。因为Text属性是字符串类型。

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

回答

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

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

所以(显然)的字符串格式转换不会发生,除非绑定源实际上被渲染为文本字符串。