Je souhaite définir BorderThickness d'une bordure d'un UserControl à l'aide de 4 TextBoxes, mais je n'arrive pas à le faire fonctionner.WPF: Liaison TwoWay entre 4 TextBoxes et 1 Border.Margin
code XAML montrant le problème (seul ce code en combinaison avec le convertisseur est nécessaire):
<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>
Un convertisseur est nécessaire pour analyser la chaîne d'entrée dans la zone de texte:
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;
}
}
Le TextBox affiche correctement la partie gauche de l'épaisseur, mais l'édition de la zone de texte n'entraîne pas de changement dans la façon dont le côté gauche de la bordure est rendu. Bizarrement, la valeur que j'ai définie dans le TextBox pour Thickness.Left persiste, donc il semble que la valeur soit définie, mais le rendu n'est pas mis à jour. Dans l'exemple de code, la modification de la valeur dans la zone de texte, puis le redimensionnement de la fenêtre, montre que la bordure sur la gauche prend de l'espace supplémentaire, mais cet espace est vide.
Est-ce que quelqu'un sait comment résoudre ce problème?