Отформатируйте строку, которая используется как привязка к TextBlock в WPF [duplicate]

Mashup всех остальных ответов. Требуется Ruby 1.9.3+, проверенный только на OS X.

Вызовите этот файл git-remove, сделайте его исполняемым и поместите его в свой путь. Затем используйте, например, git remove temp.

#!/usr/bin/env ruby
require 'io/console'

if __FILE__ == $0
      branch_name = ARGV[0] if (ARGV[0])
      print "Press Y to force delete local and remote branch #{branch_name}..."
    response = STDIN.getch
    if ['Y', 'y', 'yes'].include?(response)
      puts "\nContinuing."
      `git branch -D #{branch_name}`
      `git branch -D -r origin/#{branch_name}`
      `git push origin --delete #{branch_name}` 
    else
      puts "\nQuitting."
    end
end
25
задан svick 26 March 2013 в 19:33
поделиться

7 ответов

9
ответ дан George Lanetz 25 August 2018 в 18:09
поделиться

Я понимаю, что этот вопрос очень старый, но я думал, что все равно поделюсь альтернативным решением. Он использует поведение WPF / прикрепленные свойства:

public static class TextBlockExtensions
    {
    public static IEnumerable<Inline> GetBindableInlines ( DependencyObject obj )
        {
        return (IEnumerable<Inline>) obj.GetValue ( BindableInlinesProperty );
        }

    public static void SetBindableInlines ( DependencyObject obj, IEnumerable<Inline> value )
        {
        obj.SetValue ( BindableInlinesProperty, value );
        }

    public static readonly DependencyProperty BindableInlinesProperty =
        DependencyProperty.RegisterAttached ( "BindableInlines", typeof ( IEnumerable<Inline> ), typeof ( TextBlockExtensions ), new PropertyMetadata ( null, OnBindableInlinesChanged ) );

    private static void OnBindableInlinesChanged ( DependencyObject d, DependencyPropertyChangedEventArgs e )
        {
        var Target = d as TextBlock;

        if ( Target != null )
            {
            Target.Inlines.Clear ();
            Target.Inlines.AddRange ( (System.Collections.IEnumerable) e.NewValue );
            }
        }
    }

В вашем XAML используйте его следующим образом:

<TextBlock MyBehaviors:TextBlockExtensions.BindableInlines="{Binding Foo}" />

Это избавляет вас от необходимости наследовать от TextBlock. Он также может работать с использованием ObservableCollection вместо IEnumerable, в этом случае вам нужно будет подписаться на изменения коллекции.

2
ответ дан B. Tossings 25 August 2018 в 18:09
поделиться
0
ответ дан BadBiki 25 August 2018 в 18:09
поделиться
12
ответ дан Frank A. 25 August 2018 в 18:09
поделиться
3
ответ дан horotab 25 August 2018 в 18:09
поделиться
6
ответ дан timothymcgrath 25 August 2018 в 18:09
поделиться

Если я правильно выполнил ваше требование, вы можете вручную проверить наличие предстоящих сообщений, и для каждого сообщения вы можете добавить элемент в свойство TextBlock.Inlines. Он не будет использовать DataBinding. Я сделал это со следующим:

public string MyBindingPath
    {
        get { return (string)GetValue(MyBindingPathProperty); }
        set { SetValue(MyBindingPathProperty, value); }
    }

    // Using a DependencyProperty as the backing store for MyBindingPath.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty MyBindingPathProperty =
        DependencyProperty.Register("MyBindingPath", typeof(string), typeof(Window2), new UIPropertyMetadata(null, OnPropertyChanged));

    private static void OnPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
    {
        (sender as Window2).textBlock.Inlines.Add(new Run(e.NewValue.ToString()));
    }
4
ответ дан viky 25 August 2018 в 18:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: