2012-01-04 5 views
6

내 LOB 양식의 내 레이블 및 텍스트 상자의 글꼴 크기를 창 크기 조정 또는 해상도 변경으로 확대 및 축소합니다. 이를 위해 필자는 레이블과 텍스트 상자를 뷰 박스에 배치했습니다.텍스트 상자가 확대되지 않음

레이블 및 사용자 정의 라디오 버튼은 예상대로 작동하지만 텍스트 상자는 뷰 박스를 채우기 위해 가로로 늘어나지 않습니다 (담당자로 인해 이미지를 게시 할 수 없습니다). 텍스트 상자에 입력하면 텍스트 상자가 가로로 채워집니다. 여기

내가 함께 일하고 코드의 예입니다 : 내가 그리드, StackPanel을하고 dockpanel을 배치하려고했습니다

<Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="0.186*"/> 
      <ColumnDefinition Width="0.814*"/> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="0.127*"/> 
      <RowDefinition Height="0.873*"/> 
     </Grid.RowDefinitions> 
     <Viewbox Margin="0,0,0.917,0"> 
      <Label Content="First name:"/> 
     </Viewbox> 
     <Viewbox Grid.Column="1"> 
      <TextBox TextWrapping="Wrap"/> 
     </Viewbox> 
    </Grid> 

뷰 박스 내 (LastChildFill = "참"으로) 다음 텍스트 상자를 배치 이러한 레이아웃 컨트롤 내에서 그러나 이것은 작동하지 않았다. 텍스트 상자를 가로로 부모보기 상자를 채우려면 어쨌든 있나요?

이 문제는 WPF TextBox won't fill in StackPanel과 비슷하지만이 문제는보기 상자가 아닌 스택 패널에서 발생합니다.

+0

먼저 xaml을 수정해야합니다. 각 그리드 항목에 Column/row를 지정하지 마십시오. – GameAlchemist

+1

@VincentPiel 사실 그건 중요하지 않습니다. 열과 행의 기본값은 0입니다. – mydogisbox

답변

10

당신이 원하는 것은 쉽게 불가능하다고 생각합니다. ViewBox는 레이아웃을 측정하는 단계에서 빈 공간이 있음을 자녀에게 알려줍니다. 그 후 디스플레이는 뷰 박스에 맞습니다. 이제 무한한 공간을 갖도록 지시 된 텍스트 상자는 분명히 늘릴 수 없습니다. 2 가지 해결책이 있습니다. 원하는 것은 아니지만 어쨌든 도움이 될 수 있습니다.

첫 번째

는 :

<Viewbox Grid.Column="1" Grid.Row="0" Stretch="Uniform" > 
    <Grid Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Viewbox}}, Path=ActualWidth}"> 
     <TextBox TextWrapping="Wrap" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/> 
    </Grid> 
</Viewbox> 

이 뷰 박스에서 기대되는 행동을 당신이 가리키고 텍스트 상자 스트레칭,하지만이 비활성화됩니다. 왜? 우리는 ViewBox에 종횡비를 유지하고 텍스트 상자의 크기를 유지하는 뷰 박스의 전체 너비를 채우기 위해 텍스트 상자를 설정했습니다.

번째 :

그 뷰 박스의 scaletransform 변성 라벨에서 촬영 그리드에 높이를 추가하는 것이다.

이 하나는 시도하지 않았지만 값 변환기가 필요합니다.

결론 : 뷰 박스의 레이아웃에 따라 원하는대로 달성 할 수있는 쉬운 방법이 없습니다. 수평 확장을 원할 경우 확장하려는 경우 첫 번째 솔루션이 올바르게 작동합니다. 내 생각 엔 너 혼자해야 해.

+1

AcutalWidth 또는 ActualHeight에 대한 바인딩에 대한 경고 : "ActualHeight는 계산 된 값이기 때문에 사용자가 여러 가지 작업을 수행 한 결과 여러 번 또는 증분 변경이보고 될 수 있습니다. 레이아웃 시스템.레이아웃 시스템은 자식 요소에 필요한 측정 공간, 부모 요소에 의한 제약 조건 등을 계산할 수 있습니다. "이렇게하면 크기 조정 당 ActualHeight 또는 ActualWidth에 대한 바인딩이 여러 번 실행될 수 있습니다. – mydogisbox

+0

+1 물론 당신은 그 가치와 지적 가치가 있습니다. 그러나이 경우에는 더 나은 해결책을 알지 못합니다. – dowhilefor

+0

하하! 나는 실제적인 폭이없이 그것을했습니다! – mydogisbox

1

당신이 작동하지 않습니다 원하는/쉽지 않은 경우 다음 가짜 :

<TextBox GotFocus="TextBox_GotFocus" HorizontalAlignment="Stretch" BorderThickness="0" Grid.Column="1"/> 
    <Viewbox HorizontalAlignment="Left" Stretch="Uniform" Grid.Column="1"> 
     <TextBox x:Name="NameTextBox" Width="50" TextWrapping="Wrap" Text="Text" BorderThickness="0"/> 
    </Viewbox> 

    private void TextBox_GotFocus(object sender, RoutedEventArgs e) 
    { 
     NameTextBox.Focus(); 
     NameTextBox.SelectionStart = NameTextBox.Text.Length; 
    } 

는 기본적으로 무슨 일하는 또 다른 TextBoxViewbox 뒤에하고 뒤에 TextBox이 포커스를받을 때, 그것은에 초점을 전환입니다 ViewboxTextBox 상대 크기로 그리드를 설정했기 때문에 이상하게 크기가 조정됩니다. 원하는 효과를 얻을 때까지 그리드 열/너비 크기로 놀 필요가 있습니다.

관련 문제