Я хочу установить BorderThickness границы UserControl, используя 4 TextBoxes, но я не могу заставить его работать.WPF: привязка TwoWay между 4 TextBoxes и 1 Border.Margin
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 правильно отображает левую часть толщины, но редактирование TextBox не приводит к изменению способа отображения левой стороны границы. Как ни странно, значение, которое я установил в TextBox для Thickness.Left, сохраняется, поэтому кажется, что значение действительно установлено, но рендеринг не обновляется. В примере кода, изменяя значение в TextBox, а затем изменяя размер окна, показано, что граница слева занимает дополнительное пространство, но это пробел пуст.
Кто-нибудь знает, как это сделать и как это сделать?