Как вызвать функцию привязки из метода? - PullRequest
1 голос
/ 04 марта 2011

У меня есть ползунок, привязанный к ScaleX линии, как в следующем коде:

/* Graphics on Canvas */
Line lR = new Line();
lR.X1 = 0;
lR.Y1 = 0;
lR.X2 = 150;
lR.Y2 = 150;
lR.Stroke = new SolidColorBrush(Colors.Blue);
lR.StrokeThickness = 2;

/* declare ScaleTransformation */
ScaleTransform lRSt = new ScaleTransform();
TransformGroup lRTran = new TransformGroup();
lRTran.Children.Add(lRSt);
lR.RenderTransform = lRTran;

Binding sliderRBind1 = new Binding();
sliderRBind1.Source = sliderR;
sliderRBind1.Path = new PropertyPath("Value");
BindingOperations.SetBinding(lRSt, ScaleTransform.ScaleXProperty, sliderRBind1);
BindingOperations.SetBinding(lRSt, ScaleTransform.ScaleYProperty, sliderRBind1);


/* Slider - Slider should be placed outside the canvas to prevent being redrawn */
Slider sliderR = new Slider();
sliderR.Minimum = 1;
sliderR.Maximum = 3;
sliderR.Value = 1;
sliderR.TickPlacement = TickPlacement.BottomRight;
sliderR.TickFrequency = 0.2;
sliderR.IsSnapToTickEnabled = true;

Код работает нормально.Но если я переместлю ScaleTransform в метод, Binding будет потерян.

/* Graphics on Canvas */
Line lR = new Line();
lR.X1 = 0;
lR.Y1 = 0;
lR.X2 = 150;
lR.Y2 = 150;
lR.Stroke = new SolidColorBrush(Colors.Blue);
lR.StrokeThickness = 2;

/* declare ScaleTransformation */
ScaleTransform lRSt = new ScaleTransform();
TransformGroup lRTran = new TransformGroup();
lRTran.Children.Add(lRSt);
lR.RenderTransform = lRTran;

LineSliderR(lR);

/* Slider - Slider should be placed outside the canvas to prevent being redrawn */
Slider sliderR = new Slider();
sliderR.Minimum = 1;
sliderR.Maximum = 3;
sliderR.Value = 1;
sliderR.TickPlacement = TickPlacement.BottomRight;
sliderR.TickFrequency = 0.2;
sliderR.IsSnapToTickEnabled = true; 


public void LineSliderR(Line lRSt)
{
    Binding sliderRBind1 = new Binding();
    sliderRBind1.Source = sliderR;
    sliderRBind1.Path = new PropertyPath("Value");
    BindingOperations.SetBinding(lRSt, ScaleTransform.ScaleXProperty, sliderRBind1);
    BindingOperations.SetBinding(lRSt, ScaleTransform.ScaleYProperty, sliderRBind1);

}

Почему Binding потерпел неудачу, если он вызван в отдельный метод?

Эти два кода (для меня) идентичны.Оба содержат четыре одинаковых «вещи»: Line, ScaleTransform, Binding и Slider.

Первый код содержит все 4 "вещи" в функции.Второй код имеет вызов Binding из отдельной функции.Оба компилируются без ошибок: Однако Binding (между Line и Slider) работает нормально с первым кодом, но не со вторым.Я пытаюсь заставить работать второй код, потому что у меня много строк, и я не хочу повторяться.

1 Ответ

2 голосов
/ 04 марта 2011

Во втором блоке кода внутри метода LineSliderR lRSt - это объект типа Line, а в вашем первом блоке он имеет тип ScaleTransform.

Если вы хотите, чтобы ваш второй блок вел себя как первый, ваш метод LineSliderR должен принять ScaleTransform 'в качестве параметра:

public void LineSliderR(ScaleTransform lRSt)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...