计算XAML元素的内边距占其宽度的百分比
本文关键字:百分比 XAML 元素 计算 | 更新日期: 2023-09-27 18:12:57
我试图在XAML c# Windows运行时应用程序中设置textbox
元素的左和右填充为相同元素宽度的百分比(10%),以便当元素随窗口调整大小时,填充变化以补偿。最好的方法是什么?
我试图通过为textbox
元素制作自定义模板并在ScrollViewer
内放置具有正确列定义的网格以及新的ContentPresenter
元素来做到这一点。然而,由于某些我无法理解的原因,将ScrollViewer
的name
属性移动到新创建的ContentPresenter
会导致性能的重大损失。如果有更好的方法,我更愿意使用默认模板。
提前感谢您的建议
您可以创建一个ValueConverter,它接受您想要匹配宽度的元素。然后在文本框中,使用ValueConverter将padding与元素绑定。
像这样:
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();
}
}
然后通过将文本框的内边距绑定到它来使用转换器。为转换器提供了绑定路径,在本例中是网格。宽度属性。我们可以把这个值的90%作为一个Thickness对象返回,然后赋值给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}" />