WPF: Привязка целого числа к TextBlock с TemplateBinding

У меня есть пользовательский элемент управления в WPF. В этом у меня есть a DependencyProperty из типа int. В шаблоне для пользовательского элемента управления у меня есть a TextBlock, Я и хотел бы показать значение целого числа в TextBlock. Но я не могу заставить это работать.

Я использую TemplateBinding. Если я использую тот же код, но изменяю тип DependencyProperty кому: string это хорошо работает. Но я действительно хочу, чтобы это было целым числом для остальной части моего рвения.

Как я могу сделать это?

Я написал упрощенный код, который показывает проблему. Сначала пользовательский элемент управления:

public class MyCustomControl : Control
{
    static MyCustomControl()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(MyCustomControl), new FrameworkPropertyMetadata(typeof(MyCustomControl)));

        MyIntegerProperty = DependencyProperty.Register("MyInteger", typeof(int), typeof(MyCustomControl), new FrameworkPropertyMetadata(0));
    }


    public int MyInteger
    {
        get
        {
            return (int)GetValue(MyCustomControl.MyIntegerProperty);
        }
        set
        {
            SetValue(MyCustomControl.MyIntegerProperty, value);
        }
    }
    public static readonly DependencyProperty MyIntegerProperty;
}

И это - мой шаблон по умолчанию:

<Style TargetType="{x:Type local:MyCustomControl}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:MyCustomControl}">
                <Border BorderThickness="1" CornerRadius="4" BorderBrush="Black" Background="Azure">
                    <StackPanel Orientation="Vertical">
                        <TextBlock Text="{TemplateBinding MyInteger}" HorizontalAlignment="Center" />
                    </StackPanel>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

И использование:

<Window x:Class="CustomControlBinding.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:CustomControlBinding"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <local:MyCustomControl Width="100" Height="100" MyInteger="456" />
</Grid>

Что я делаю неправильно?

Спасибо//David

15
задан STiLeTT 31 October 2013 в 10:20
поделиться

1 ответ

Попробуйте использовать обычное связывание с a RelativeSource из TemplatedParent :

<TextBlock Text="{Binding MyInteger, RelativeSource={RelativeSource TemplatedParent}}" HorizontalAlignment="Center" />

Согласно этот поток , это ограничение TemplateBinding :

TemplateBinding - это легкий "привязка", не поддерживает некоторые особенности традиционного переплета, такие как автоматическое преобразование типов с использованием преобразователи известного типа, связанные с целевым свойством

18
ответ дан 1 December 2019 в 04:00
поделиться
Другие вопросы по тегам:

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