我正在创建一个源自Grid的自定义WPF控件。 这是一个国际象棋棋盘,所以我希望它的宽度与它的高度相同。 我怎么能做到这一点?
编辑:
我尝试了以下内容。
private void cbcBoard_SizeChanged(object sender, SizeChangedEventArgs e)
{
if (e.NewSize.Width != e.NewSize.Height)
{
double m = Math.Min(e.NewSize.Width, e.NewSize.Height);
cbcBoard.Width = m;
cbcBoard.Height = m;
}
}
它不起作用。有什么想法吗?
感谢。
答案 0 :(得分:2)
新解决方案/解决方法。 UserControl可以保持原样,我们将缩放到父容器。
我们不能仅使用UserControl来实现Min(宽度,高度),因为如果我们为它设置了Height,那么父容器将不会将其缩放到Verticaly,而Width也是如此。如果我们试图将它们放在那里,那么有些情况下我们会以无限的宽度/高度调整大小循环结束。
我们需要的是在同一空间中完全填充它的另一个隐藏控件,并且可以告诉我们每次更改时它的宽度和高度是多少。然后我们可以使用Math.Min(宽度,高度)解决方案。像这样的东西。注意两个控件是如何在Grid.Row =“1”和Grid.Column =“1”。
<Rectangle Name="availableSpace"
SizeChanged="availableSpace_SizeChanged"
Fill="Transparent"
Grid.Row="1"
Grid.Column="1"/>
<myLib:UserControl1 x:Name="userControl11"
Grid.Row="1"
Grid.Column="1"
HorizontalAlignment="Left"
VerticalAlignment="Top"/>
然后在availableSpace_SizeChanged EventHandler
中private void availableSpace_SizeChanged(object sender, SizeChangedEventArgs e)
{
double minValue = Math.Min(availableSpace.ActualWidth, availableSpace.ActualHeight);
userControl1.Width = minValue;
userControl1.Height = minValue;
}
现在我们有1:1的UserControl比例,它将垂直和水平缩放
答案 1 :(得分:1)
我认为最简单的解决方案是将UserControl
的大小设置为Height
== Width
的某个常量值,然后将整个内容放入Viewbox
这将为您处理缩放(同时保持宽高比)。
<Viewbox>
<myLib:UserControl1 x:Name="userControl11" />
</Viewbox>
这意味着您的控件将被“拉伸”而不是调整大小,这可能会使它不适合您,但它很容易实现!