आमतौर पर, आप अपने परिदृश्य के लिए एक बिल्ट-इन लेआउट नियंत्रण का उपयोग करेंगे (जैसे यदि आप माता-पिता के सापेक्ष स्केलिंग चाहते हैं तो ग्रिड का उपयोग करें)। यदि आप इसे मनमाने ढंग से मूल तत्व के साथ करना चाहते हैं, तो आप एक ऐसा मान कर सकते हैं, जिसे आप कर सकते हैं, लेकिन यह उतना साफ नहीं होगा जितना आप चाहते हैं। हालाँकि, अगर आपको इसकी आवश्यकता है, तो आप कुछ इस तरह से कर सकते हैं:
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();
}
}
जिसका उपयोग इस तरह किया जा सकता है, अपने मूल कैनवास की चौड़ाई का 10% एक बच्चा टेक्स्टबॉक्स पाने के लिए:
<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>