我使用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)事件,它不会:调用事件,但对形状没有影响。你知道怎么解决吗?
答案 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);
}