StringFormat is ignored

前端 未结 3 1754
执念已碎
执念已碎 2020-12-16 11:13


This is my binding (shortened, Command-Property is also bound)



        
相关标签:
3条回答
  • 2020-12-16 11:34

    use Binding Converter:

    public class CommandParamConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value is string)
            {
                return string.Format("Key {0}", value);
            }
            return value;
        }
    
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
    

    Add it to Windows\UserControl resource:

    <Window.Resources>
        <local:CommandParamConverter x:Key="commandParamConverter" />
    </Window.Resources>
    

    Refer it in Menu CommandParameter binding:

    <MenuItem Header="Key" CommandParameter="{Binding Converter={StaticResource commandParamConverter}, Path=PlacementTarget.Tag, RelativeSource={RelativeSource AncestorType=ContextMenu}}"/>
    
    0 讨论(0)
  • 2020-12-16 11:41

    I'm astounded, but my tests just show that StringFormat only applies if the target d-prop is of type String. I've never noticed this before, nor heard it mentioned. I don't have more time to look into it right now, but this seems ridiculous.

    Seriously, this works:

    <TextBlock x:Name="textBlock" Text="Base Text"/>
    <TextBlock Text="{Binding StringFormat=FORMATTED {0}, Path=Text, ElementName=textBlock}"/>
    

    This does not:

    <TextBlock x:Name="textBlock" Text="Base Text"/>
    <Label Content="{Binding StringFormat=FORMATTED {0}, Path=Text, ElementName=textBlock}"/>
    

    Since Label.Content is not a String.

    0 讨论(0)
  • 2020-12-16 11:49

    Label does not use StringFormat but ContentStringFormat. Use it this way:

    <TextBlock x:Name="textBlock" Text="Base Text"/>
    <Label Content="{Binding Path=Text, ElementName=textBlock}" ContentStringFormat="FORMATTED {0}"/>
    
    0 讨论(0)
提交回复
热议问题