Арифметика в программно связанных элементах управления
Я хочу установить привязку программно созданного элемента управления с учетом арифметики. Вот пример XAML того, что я пытаюсь сделать, используя расширение "qc":
<ColumnDefinition x:Name="MidColumn"
Width="{qc:Binding '$P * .727', P={Binding ActualHeight, ElementName=PaperCanvas}}" />
Вот пример того, что я пытаюсь сделать в реальном коде:
Binding binding = new Binding();
//Below is pseudo code for what i'm trying to do
binding.Path = new PropertyPath(Canvas.ActualWidthProperty * 0.7);
binding.Source = TrueCanvas;
binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
BindingOperations.SetBinding(((Rectangle)CurrentControl), Rectangle.WidthProperty, binding);
Я смотрел на использование Grid
так что я могу установить Width
а также Height
в процентах с использованием GridUnitType.Star
Но с тем, где я сейчас нахожусь, это скорее всего принесет больше вреда, чем пользы, поэтому я пытаюсь просто укусить пулю и посмотреть, смогу ли я сделать это таким образом.
1 ответ
Этот синтаксис "qc" выглядит не как конвертер, а как расширение разметки. Если вы хотите использовать IValueConverter (который кажется лучшим), то вы просто добавляете его в привязку.
binding.Path = new PropertyPath(Canvas.ActualWidthProperty);
binding.Converter = new WidthConverter();
Код конвертера должен выглядеть примерно так:
public class WidthConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var x = (double)value;
return x * 0.7;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
(Если по какой-то причине вам действительно нужно использовать эту пользовательскую привязку "qc", как в вашем отрывке XAML, то вам, вероятно, просто нужно установить это свойство "формулы", каким бы оно ни было, в коде.)