2013-03-01 93 views
0

我创建了一个类从UserControl
派生我的任务是控制高度和宽度的大小比例。 (如果容器插入控件将调整它的大小。)我需要严格控制方形。动态改变控件的大小?

应该做些什么来改变控件的新维度? SizeChangedEventArgs.NewSize属性是只读的。

private void MyControl_SizeChanged(object sender,SizeChangedEventArgs e) 
{ 
    if (e.NewSize.Height!=e.NewSize.Width) 
    { 
     // to-do ? 
    } 
} 

宽度和高度在我的情况是NaN,因为模式设置为自动。我无法手动更改宽度或高度属性,因为此时控件将自动固定大小,并且在缩放放置网格时不会更改。

+1

你想的宽度改变高度或喜ght到宽度 – 2013-03-01 08:59:59

+0

@SonerGönül你忘了再次编辑代码块:) – Default 2013-03-01 09:08:58

+0

@Default该死!我刚刚几分钟前醒了过来。也许我需要一杯咖啡。 – 2013-03-01 09:12:13

回答

3

如果你想有一个控制,是完全平方,最简单的方法是使用绑定像这样:

<Control Width="{Binding RelativeSource={RelativeSource Self}, Path=ActualHeight}"/> 

编辑 OK,好像你可以用你的事件处理进展顺利:

FrameworkElement control =(sender as FrameworkElement); 
double longerSideLength = (control.Width >= control.Height ? control.Width : control.Height); 
control.Width = longerSideLength; 
control.Height = longerSideLength; 

你可能想一些验证添加到减少呼叫计...

+0

情况有点困难,我想要那种制服。 (w> h)w = h; if(h> w)h = w; – Mixer 2013-03-01 09:26:02

+0

它会帮助把你的控件放在[viewbox](http://wpftutorial.net/ViewBox.html)中吗? – 2013-03-01 09:28:00

+0

我在开始使用ViewBox为此目的 ,但我不得不停止使用它原因在这里描述: http://stackoverflow.com/questions/14957794/viewbox-stretch-blurs-the-controls – Mixer 2013-03-01 09:30:27