Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在wpf中以编程方式维护对象的纵横比_C#_Wpf - Fatal编程技术网

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文件生成标签的程序,所有标签都有不同的维度,仅供参考