2016-10-06 57 views
1

Borderを特定の幅と高さでグリッドにプログラムで追加します。wpfでオブジェクトのアスペクト比をプログラムで維持する方法

  1. は、グリッドが縮小またはアップするたびに国境は(
  2. が境界スケールを作成し、グリッド内の可能な限り大きな作るアスペクト比を維持し、記入してください:しかし、私は、次のいずれかを取得したいです

    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); 
    

    :私は私の窓のサイズを変更する場合、これは状況です現時点では)もっとグリッドの割合のように、

を最大の可能性をparticularilyありません通常の状況:

enter image description here

スケール状況:

enter image description here

だから私はそれが適切にサイズを変更し、白い矩形の内部に滞在したいと思います。ちなみに、白いグリッドには余白があります;-) ありがとうございます!

+0

グリッドを3つの列に分ける必要があります。最初と最後の "自動"と中央の "*"です。真ん中には矩形があり、側面には境界線があります。 –

+0

または、おそらくViewBoxが目標に達するのを助けることができます – lerthe61

+0

@ lerthe61はそれを実際に見ましたが、正確には理解できませんでした – Markinson

答えて

3

は、ちょうどViewboxUniformに設定されStretchプロパティで使用します。

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); 

は、 previewgridCanvasある場合は、このソリューションが動作しませんのでご注意ください。 私はそれがあなたを助けることを願っています。

1

最も簡単な方法:

<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> 

C#の場合:通常

 myGrid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(50) }); 
     myGrid.ColumnDefinitions.Add(new ColumnDefinition()); 
     myGrid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(50) }); 

     Border b1 = new Border 
     { 
      Background = new SolidColorBrush(Colors.Blue), 
      CornerRadius = new CornerRadius(100, 0, 0, 100) 
     }; 

     Grid.SetColumn(b1, 0); 

     Border b2 = new Border 
     { 
      Background = new SolidColorBrush(Colors.Blue), 
     }; 
     Grid.SetColumn(b2, 1); 
     Border b3 = new Border 
     { 
      Background = new SolidColorBrush(Colors.Blue), 
      CornerRadius = new CornerRadius(0, 100, 100, 0), 
     }; 
     Grid.SetColumn(b3, 2); 

     myGrid.Children.Add(b1); 
     myGrid.Children.Add(b2); 
     myGrid.Children.Add(b3); 

:サイズ変更

enter image description here

enter image description here

あなたには十分ですか? lerthe61が示唆したように

+0

1. XAML(残念ながら)と2ではなく、C#で行う必要があります。それは、縦横比を維持していないので、十分残念ながら良くない:(XAMLは十分ではないのはなぜ – Markinson

+0

@Derpん? –

+0

ようにXAMLで可能ではないでしょう、それはXMLファイルからのデシリアライズされたオブジェクトであり、値が変わる可能性があるため(私の知る限りでは) – Markinson

関連する問題