Арифметика в программно связанных элементах управления

Я хочу установить привязку программно созданного элемента управления с учетом арифметики. Вот пример 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, то вам, вероятно, просто нужно установить это свойство "формулы", каким бы оно ни было, в коде.)

Другие вопросы по тегам