XAML 使用TemplateBinding绑定整数值时不显示任何内容

xggvc2p6  于 2023-08-01  发布在  其他
关注(0)|答案(1)|浏览(94)

我试图将一个整数绑定到ControlTemplate,但没有显示任何内容。下面是我的TextBlock,它是我的ControlTemplate的一部分:

<TextBlock FontSize="14"
           Foreground="#000"
           Text="{TemplateBinding Number}"/>

字符串
下面是我的依赖项属性,它是我的CustomControl的一部分:

public static readonly DependencyProperty NumberProperty = DependencyProperty.Register(nameof(Number), typeof(int), typeof(MyCustomControl), new PropertyMetadata(0));

public int Number
{
    get => (int)GetValue(NumberProperty);
    set => SetValue(NumberProperty, value);
}


我也试过了,但也不管用:

<TextBlock FontSize="14"
            Foreground="#000"
            Text="{Binding Number, RelativeSource={RelativeSource TemplatedParent}, TargetNullValue=''}"/>


如果我将其更改为string,则可以工作??

z9zf31ra

z9zf31ra1#

你必须使用一个转换器将int转换为字符串值。下面是这样的转换器的例子。

public sealed class IntToStringConverter : IValueConverter
{
    public object Convert(object? value, Type targetType, object parameter, string language)
    {
        return ((int)value!).ToString();
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        throw new NotImplementedException();
    }
}

字符串
而不是TemplatedBinding在控制模板中,你应该使用这样的语句。

<TextBlock FontSize="14" Foreground="#000"
           Text="{Binding Number, RelativeSource={RelativeSource Mode=TemplatedParent}, Converter={StaticResource IntToStringConverter}}" />


还有一件事您必须在xaml中的某个地方定义转换器,以便能够将其用作StaticResource

<c:IntToStringConverter x:Key="IntToStringConverter" />

更新

不需要转换器将整数值显示为文本。

//Working
 Text="{Binding Number, RelativeSource={RelativeSource Mode=TemplatedParent}}"
 
 //Not working    
 Text="{TemplateBinding Number}"

相关问题