Thông thường, bạn sẽ sử dụng điều khiển bố cục tích hợp phù hợp với kịch bản của mình (ví dụ: sử dụng lưới làm cha mẹ nếu bạn muốn chia tỷ lệ so với cha mẹ). Nếu bạn muốn làm điều đó với một phần tử cha tùy ý, bạn có thể tạo một ValueConverter làm điều đó, nhưng có lẽ nó sẽ không hoàn toàn sạch như bạn muốn. Tuy nhiên, nếu bạn thực sự cần nó, bạn có thể làm một cái gì đó như thế này:
public class PercentageConverter : IValueConverter
{
public object Convert(object value,
Type targetType,
object parameter,
System.Globalization.CultureInfo culture)
{
return System.Convert.ToDouble(value) *
System.Convert.ToDouble(parameter);
}
public object ConvertBack(object value,
Type targetType,
object parameter,
System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
Có thể được sử dụng như thế này, để có được một hộp văn bản con 10% chiều rộng của khung vẽ chính của nó:
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<local:PercentageConverter x:Key="PercentageConverter"/>
</Window.Resources>
<Canvas x:Name="canvas">
<TextBlock Text="Hello"
Background="Red"
Width="{Binding
Converter={StaticResource PercentageConverter},
ElementName=canvas,
Path=ActualWidth,
ConverterParameter=0.1}"/>
</Canvas>
</Window>