C# 如何在wpf中以编程方式维护对象的纵横比
我以编程方式将具有一定宽度和高度的C# 如何在wpf中以编程方式维护对象的纵横比,c#,wpf,C#,Wpf,我以编程方式将具有一定宽度和高度的边框添加到网格中。但是,我希望获得以下任一项: 使边框保持纵横比并填充,使其在网格内尽可能大 每当网格向下或向上缩放时,都要进行边界缩放(因此不一定是最大的,更像是网格的百分比) 目前,当我调整窗口大小时,情况就是这样: Color borderColor = (Color)ColorConverter.ConvertFromString(BorderColor); Color backgroundColor = (Color)ColorConverter.Co
边框添加到网格中。但是,我希望获得以下任一项:
使边框保持纵横比并填充,使其在网格内尽可能大
每当网格向下或向上缩放时,都要进行边界缩放(因此不一定是最大的,更像是网格的百分比)
目前,当我调整窗口大小时,情况就是这样:
Color borderColor = (Color)ColorConverter.ConvertFromString(BorderColor);
Color backgroundColor = (Color)ColorConverter.ConvertFromString(BackgroundColor);
Border border = new Border();
border.BorderThickness = new Thickness(BorderSize);
border.CornerRadius = new CornerRadius(TopLeftCornerRadius, TopRightCornerRadius, BottomRightCornerRadius, BottomLeftCornerRadius);
border.BorderBrush = (SolidColorBrush)(new BrushConverter().ConvertFrom(BorderColor));
border.Background = (SolidColorBrush)(new BrushConverter().ConvertFrom(BackgroundColor));
border.Width = Width;
border.Height = Height;
border.Margin = new Thickness(10);
previewgrid.Children.Add(border);
正常情况:
情况:
因此,我希望它能够正确调整大小,并保持在白色矩形内。顺便说一下,正如您所看到的,白色网格有一个边距;-)
提前谢谢 最简单的方法:
<Grid Margin="50">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="50" />
</Grid.ColumnDefinitions>
<Border CornerRadius="50,0,0,50"
Background="Green" />
<Border CornerRadius="0"
Grid.Column="1"
Background="Green" />
<Border CornerRadius="0,50,50,0"
Grid.Column="2"
Background="Green" />
</Grid>
正常:
调整大小:
这对你来说够好吗?最简单的方法是:
<Grid Margin="50">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="50" />
</Grid.ColumnDefinitions>
<Border CornerRadius="50,0,0,50"
Background="Green" />
<Border CornerRadius="0"
Grid.Column="1"
Background="Green" />
<Border CornerRadius="0,50,50,0"
Grid.Column="2"
Background="Green" />
</Grid>
正常:
调整大小:
它对您足够好吗?正如lerthe61所建议的,只需使用a,将其拉伸属性设置为统一:
Color borderColor = (Color)ColorConverter.ConvertFromString(BorderColor);
Color backgroundColor = (Color)ColorConverter.ConvertFromString(BackgroundColor);
Border border = new Border();
border.BorderThickness = new Thickness(BorderSize);
border.CornerRadius = new CornerRadius(TopLeftCornerRadius, TopRightCornerRadius, BottomRightCornerRadius, BottomLeftCornerRadius);
border.BorderBrush = (SolidColorBrush)(new BrushConverter().ConvertFrom(BorderColor));
border.Background = (SolidColorBrush)(new BrushConverter().ConvertFrom(BackgroundColor));
border.Width = Width;
border.Height = Height;
border.Margin = new Thickness(10);
Viewbox viewBox = new Viewbox();
viewBox.Stretch = Stretch.Uniform;
viewBox.Child = border;
previewgrid.Children.Add(viewBox);
请注意,如果previewgrid
是Canvas
,则此解决方案不起作用。
我希望它能对您有所帮助。正如lerthe61建议的那样,只需使用a,并将其拉伸
属性设置为统一
:
Color borderColor = (Color)ColorConverter.ConvertFromString(BorderColor);
Color backgroundColor = (Color)ColorConverter.ConvertFromString(BackgroundColor);
Border border = new Border();
border.BorderThickness = new Thickness(BorderSize);
border.CornerRadius = new CornerRadius(TopLeftCornerRadius, TopRightCornerRadius, BottomRightCornerRadius, BottomLeftCornerRadius);
border.BorderBrush = (SolidColorBrush)(new BrushConverter().ConvertFrom(BorderColor));
border.Background = (SolidColorBrush)(new BrushConverter().ConvertFrom(BackgroundColor));
border.Width = Width;
border.Height = Height;
border.Margin = new Thickness(10);
Viewbox viewBox = new Viewbox();
viewBox.Stretch = Stretch.Uniform;
viewBox.Child = border;
previewgrid.Children.Add(viewBox);
请注意,如果previewgrid
是Canvas
,则此解决方案不起作用。
我希望它能帮助您。您需要将网格分为3列:第一列和最后一列“自动”,中间是“*”。中间是长方形和边框,或者ViewBox可以帮你到达。goal@lerthe61确实看到了,但无法弄清楚画布的准确程度是多少?@Derp您可以尝试这样的方法:var viewBox=new viewBox();viewBox.Child=边框;previewgrid.Children.Add(viewBox);您需要将网格分隔为3列:第一列和最后一列为“自动”,中间为“*”。中间是长方形和边框,或者ViewBox可以帮你到达。goal@lerthe61确实看到了,但无法弄清楚画布的准确程度是多少?@Derp您可以尝试这样的方法:var viewBox=new viewBox();viewBox.Child=边框;previewgrid.Children.Add(viewBox);1.它必须在C#中完成,而不是XAML(不幸的是)和2。它没有保持高宽比,所以不幸的是不够好:(@Derp为什么XAML不够?因为它是XML文件中的反序列化对象,并且值可以更改,因此在XAML中不可能更改(据我所知),您可以获取这些值并将其传输到C#::)代码与您的代码类似,您只需要将网格分隔为3列,并使用3代替1个边框。但想法很清楚。不是吗?如果你能在帮助下更新你的答案,那就太棒了;)只要假设值可能不同。我有一个从xml文件生成标签的程序,所有标签都有不同的维度,FYI1。它必须在C#中完成,而不是XAML(不幸的是)和2。它没有保持高宽比,所以不幸的是不够好:(@Derp为什么XAML不够?因为它是XML文件中的反序列化对象,并且值可以更改,因此在XAML中不可能更改(据我所知),您可以获取这些值并将其传输到C#::)代码与您的代码类似,您只需要将网格分隔为3列,并使用3代替1个边框。但想法很清楚。不是吗?如果你能在帮助下更新你的答案,那就太棒了;)只要假设值可能不同。我有一个从xml文件生成标签的程序,所有标签都有不同的维度,仅供参考