4 つの TextBox を使用して UserControl の Border の BorderThickness を設定したいのですが、うまくいきません。
問題を示す XAML コード (コンバーターと組み合わせたこのコードのみが必要です):
<Window
x:Class="BorderThicknessBindingTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:BorderThicknessBindingTest="clr-namespace:BorderThicknessBindingTest"
Height="300" Width="500">
<Window.Resources>
<BorderThicknessBindingTest:ThicknessConverter x:Key="ThicknessConverter"/>
</Window.Resources>
<Grid Margin="10">
<Border
x:Name="MyBorder"
BorderBrush="Black"
Background="AliceBlue"
BorderThickness="3"/>
<TextBox
HorizontalAlignment="Center" VerticalAlignment="Center"
Text="{Binding Path=BorderThickness.Left, ElementName=MyBorder, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource ThicknessConverter}}"/>
</Grid>
</Window>
TextBox に入力された文字列を解析するには、コンバーターが必要です。
public class ThicknessConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value; // don't need to do anything here
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
double d;
Double.TryParse((string) value, out d); // Thickness.Left doesn't take a string
return d;
}
}
TextBox は Thickness の Left 部分を正しく表示しますが、TextBox を編集しても、Border の左側がレンダリングされる方法は変わりません。奇妙なことに、Thickness.Left の TextBox に設定した値が保持されるため、値が設定されているように見えますが、レンダリングは更新されません。サンプル コードでは、TextBox の値を変更してから Window のサイズを変更すると、左側の境界線が追加のスペースを占有することを示していますが、このスペースは空白です。
これを修正する方法を知っている人はいますか?