Я хочу установить BorderThickness Границы UserControl, используя 4 TextBox, но я не могу заставить его работать.
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, а затем изменение размера окна показывает, что граница слева занимает дополнительное пространство, но это поле пустое.
Кто-нибудь знает, как это исправить?