【问题标题】:How to call Binding function from a method?如何从方法中调用绑定函数?
【发布时间】:2011-03-04 06:33:47
【问题描述】:

我有一个绑定到 Line ScaleX 的 Slider,如下代码:

/* 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);

}

如果调用单独的方法,为什么绑定会失败?

这两个代码(对我来说)是相同的。两者都包含四个相同的、相同的“事物”: Line、ScaleTransform、Binding 和 Slider。

第一个代码在一个函数中包含所有 4 个“事物”。第二个代码具有来自单独函数的 Binding 调用。两者都编译没有错误:但是,绑定(在 Line 和 Slider 之间)在第一个代码上工作正常,但不是第二个。我正在尝试让第二个代码工作,因为我有很多 Line,我不想重复自己。

【问题讨论】:

    标签: c# wpf binding


    【解决方案1】:

    在您的第二个代码块中,在方法@​​987654321@ 中,lRSt 是Line 类型的对象,而在您的第一个代码块中,它是ScaleTransform 类型的对象。

    如果你想让你的第二个块表现得像第一个,你的 LineSliderR 方法应该接受 ScaleTransform' 作为参数:

    public void LineSliderR(ScaleTransform lRSt)
    

    【讨论】:

      猜你喜欢
      • 2021-09-13
      • 2023-03-30
      • 2014-11-21
      • 2015-10-01
      • 2020-01-03
      • 2017-08-31
      • 1970-01-01
      • 2018-07-12
      • 2018-07-30
      相关资源
      最近更新 更多