您可以创建一个ValueConverter,它接受要匹配宽度的元素。然后在文本框中,使用ValueConverter将您的填充绑定到元素。
事情是这样的:
public sealed class PercentageOfValueConverter : IValueConverter
{
private const double DefaultValue = 150;
private const double Percentage = 0.9;
public object Convert(object value, Type targetType, object parameter, string language)
{
double result = 0;
double.TryParse(value.ToString(), out result);
if (result == double.NaN)
{
return DefaultValue; // Default value.
}
// Thickness gets assigned to the Padding property.
return new Thickness(result * Percentage, 0, result * Percentage, 0);
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
然后你会被你的文本框的填充结合它使用转换器。转换器提供了绑定路径,在这种情况下,它是Grid.Width属性。我们可以将其作为Thickness对象返回该值的90%,然后将其分配给padding属性。
<Grid x:Name="LayoutRoot">
<Grid.Resources>
<local:PercentageOfValueConverter x:Key="PercentageOfValueConverter" />
</Grid.Resources>
<TextBox Padding="{Binding ElementName=LayoutRoot,
Converter={StaticResource PercentageOfValueConverter},
Path=Width, Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}" />