Users from the interface are invited to select indents for the window:

<TextBlock Grid.Row="7" Grid.Column="0" HorizontalAlignment="Right" Style="{DynamicResource TextBlockDetailsStyle}" Text="Отступ слева" Visibility="{Binding IsEmpty, Converter={StaticResource InversedBoolToVisibilityConverter}}" /> <extToolkit:IntegerUpDown Grid.Row="7" Grid.Column="1" Margin="2" Maximum="100" Minimum="0" Value="{Binding MarginLeft, UpdateSourceTrigger=PropertyChanged}" Visibility="{Binding IsEmpty, Converter={StaticResource InversedBoolToVisibilityConverter}}" /> <TextBlock Grid.Row="8" Grid.Column="0" HorizontalAlignment="Right" Style="{DynamicResource TextBlockDetailsStyle}" Text="Отступ сверху" Visibility="{Binding IsEmpty, Converter={StaticResource InversedBoolToVisibilityConverter}}" /> <extToolkit:IntegerUpDown Grid.Row="8" Grid.Column="1" Margin="2" Maximum="100" Minimum="0" Value="{Binding MarginTop, UpdateSourceTrigger=PropertyChanged}" Visibility="{Binding IsEmpty, Converter={StaticResource InversedBoolToVisibilityConverter}}" /> <TextBlock Grid.Row="9" Grid.Column="0" HorizontalAlignment="Right" Style="{DynamicResource TextBlockDetailsStyle}" Text="Отступ справа" Visibility="{Binding IsEmpty, Converter={StaticResource InversedBoolToVisibilityConverter}}" /> <extToolkit:IntegerUpDown Grid.Row="9" Grid.Column="1" Margin="2" Maximum="100" Minimum="0" Value="{Binding MarginRight, UpdateSourceTrigger=PropertyChanged}" Visibility="{Binding IsEmpty, Converter={StaticResource InversedBoolToVisibilityConverter}}" /> <TextBlock Grid.Row="10" Grid.Column="0" HorizontalAlignment="Right" Style="{DynamicResource TextBlockDetailsStyle}" Text="Отступ снизу" Visibility="{Binding IsEmpty, Converter={StaticResource InversedBoolToVisibilityConverter}}" /> <extToolkit:IntegerUpDown Grid.Row="10" Grid.Column="1" Margin="2" Maximum="100" Minimum="0" Value="{Binding MarginDown, UpdateSourceTrigger=PropertyChanged}" Visibility="{Binding IsEmpty, Converter={StaticResource InversedBoolToVisibilityConverter}}" /> 

How best to associate MarginLeft, MarginTop, etc. with the Margin property. You can’t write Margin = "{Binding MarginLeft} {Binding MarginTop} {Binding MarginRight} {Binding MarginDown}"

  • The converter? ... - Andrey NOP
  • @ AndreiNOP write the answer, I do not yet have the opportunity to write a full-fledged example - Artyom Okonechnikov

1 answer 1

Write such a multi-converter:

 class MarginConverter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { var left = (int)values[0]; var top = (int)values[1]; var right = (int)values[2]; var bottom = (int)values[3]; return new Thickness(left, top, right, bottom); } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } 

And use:

 <Grid Margin="5"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition/> </Grid.RowDefinitions> <UniformGrid Columns="2"> <TextBlock Text="Слева:"/> <TextBox Text="{Binding Left}"/> <TextBlock Text="Сверху:"/> <TextBox Text="{Binding Top}"/> <TextBlock Text="Справа:"/> <TextBox Text="{Binding Right}"/> <TextBlock Text="Снизу:"/> <TextBox Text="{Binding Bottom}"/> </UniformGrid> <Border Grid.Row="10" BorderThickness="1" BorderBrush="Red"> <Border.Resources> <c:MarginConverter x:Key="conv"/> </Border.Resources> <Border BorderBrush="Green" BorderThickness="1"> <Border.Margin> <MultiBinding Converter="{StaticResource conv}"> <Binding Path="Left"/> <Binding Path="Top"/> <Binding Path="Right"/> <Binding Path="Bottom"/> </MultiBinding> </Border.Margin> </Border> </Border> </Grid> 

enter image description here