在事件发生后调整WPF中的形状

时间:2018-06-02 12:55:41

标签: c# wpf

我使用WPF在Office面板上显示形状。 我可以在加载应用程序时调整大小。但是,如果用户调整包含形状的面板,我想调整此形状的大小。 我的问题是开始时定义的边距在加载后没有改变,所以尺寸保持其初始边距。

我有一个包含WPF Shape和resize事件处理程序的UserControl:

private void UserControlA_Resize(object sender, EventArgs e)
{
        myWPF.SetSizeOfShape(sizeOfPanel); // I collect sizeOfPanel, and it is OK, it is changed when panel is resized
}

WPF的xaml是:

<Border Name="myShape"  Background="blue" CornerRadius="8" Margin="10,126,139,199" />

WPF .cs是:

public void SetSizeOfShape(int widthOfPanel)
{
      myShape.Margin = new Thickness(widthOfPanel/3, 100, widthOfPanel/6, 100);

在加载应用程序并正确设置大小时调用SetSizeOfShape - 但是如果更改了大小,则会再次调用它,但不会更改显示的边距。

你知道什么是错的以及如何纠正它吗?

-----编辑----- 我的事件处理程序可能存在问题。实际上,如果我通过单击按钮放置事件,它就可以工作 - 但是如果我使用Resize(或sizeChanged)事件,它不会:调用事件,但对形状没有影响。你知道怎么解决吗?

1 个答案:

答案 0 :(得分:0)

我没有看到Border Control的Resize事件。它可以根据其内容进行调整。也许给我们更多关于你要做什么的细节。

public void MyMouseOver()
{
    Ellipse myShape = new Ellipse() { Width = 200, Height = 100, Stroke = Brushes.Yellow, };
    MyCanvas.Children.Add(myShape);
    Canvas.SetTop(myShape,10);
    Canvas.SetLeft(myShape,10);

    myShape.MouseEnter += MyShape_MouseEnter;
    myShape.MouseLeave += MyShape_MouseLeave;
}

private void MyShape_MouseLeave(object sender, MouseEventArgs e)
{
    ((Ellipse)sender).RenderTransform = new ScaleTransform(1, 1);    // return scale to normal
}

private void MyShape_MouseEnter(object sender, MouseEventArgs e)
{
    ((Ellipse)sender).RenderTransform = new ScaleTransform(1.1, 1.1, Width / 2, Height / 2);
}