2016-10-06 2 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#으로 수행해야합니다.(어쨌든 충분하지 않다.) ( – Markinson

+0

@Derp XAML이 충분하지 않은 이유는 무엇입니까? –

+0

XML 파일에서 deserialize 된 개체이므로 값이 변경되어 XAML에서 가능하지 않을 수 있습니다 (내가 아는 한도까지) – Markinson

관련 문제