2014-02-12 4 views
1

부모 창의 크기를 기준으로 컨트롤의 너비와 내용의 크기를 조정하려고합니다. 예를 들어 :창 너비에 따라 컨트롤을 자르는 방법?

창을보다 작은 크기 조정될
<Window 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Grid> 
     <StackPanel Orientation="Horizontal"> 
      <Border Width="100" Background="Red" /> 
      <Border Width="100" Background="Green" /> 
      <Border Width="100" Background="Blue" /> 
     </StackPanel> 
    </Grid> 
</Window> 

내가 테두리에 원하는 폭 300 픽셀은 예를 들어,의와을 가지고 30. 어떻게 할 수 있습니까? 감사

답변

3
당신은 당신의 Grid에 열을 생성하고 설정할 수 있습니다

MaxWidth 100 : 당신이 전체 GridWidth을 제한하려면

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition MaxWidth="100"/> 
     <ColumnDefinition MaxWidth="100"/> 
     <ColumnDefinition MaxWidth="100"/> 
    </Grid.ColumnDefinitions> 
    <Border Grid.Column="0" Background="Red" /> 
    <Border Grid.Column="1" Background="Green" /> 
    <Border Grid.Column="2" Background="Blue" /> 
</Grid> 

또는 다음이 작동합니다 :

<Grid MaxWidth="300"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition/> 
     <ColumnDefinition/> 
     <ColumnDefinition/> 
    </Grid.ColumnDefinitions> 
    <Border Grid.Column="0" Background="Red" /> 
    <Border Grid.Column="1" Background="Green" /> 
    <Border Grid.Column="2" Background="Blue" /> 
</Grid> 

에서 이 경우 사용 가능한 공간 (최대 300)은 모든 열 사이에서 동등하게 나뉩니다.

더 복잡한 규칙에 대한 또 다른 해결책은 사용자 정의 IValueConverter 수 있습니다

편집 : XAML 다음

public class WidthConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     var width = (double)value; 
     if (width > 300) 
      return 100; 
     else 
      return 30; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

과 : 귀하의 답변에 대한

<Grid> 
    <Grid.Resources> 
     <local:WidthConverter x:Key="WidthConverter"/> 
     <Style TargetType="{x:Type ColumnDefinition}"> 
      <Setter Property="Width" Value="{Binding ElementName=myWindow, Path=ActualWidth, Converter={StaticResource WidthConverter}}"/> 
     </Style> 
    </Grid.Resources>   
    <Grid.ColumnDefinitions> 
     <ColumnDefinition/> 
     <ColumnDefinition/> 
     <ColumnDefinition/> 
    </Grid.ColumnDefinitions> 
    <Border Grid.Column="0" Background="Red" /> 
    <Border Grid.Column="1" Background="Green" /> 
    <Border Grid.Column="2" Background="Blue" /> 
</Grid> 
+0

감사합니다,하지만 난 싶지 않아 컨트롤의 너비를 동적으로 변경합니다. 정말 "단계별로"너비를 변경하고 싶습니다. – user1130329

+0

~ _ steps_을 (를) 정의 할 수 있습니까? – dkozl

+0

예 - 필자가 쓴대로 테두리 너비를 100으로 설정하고 창 너비가 300보다 작 으면 테두리를 30 너비로 설정합니다. 다른 예 : Word를 열고 창 크기를 변경하십시오. 툴바는 창 너비에 따라 내용을 변경합니다 (일부 항목은 "압축"됨). 이것은 시뮬레이션하려는 효과입니다. – user1130329

관련 문제