2012-07-25 3 views
0

WPF에서 간단한 메뉴 모음을 만들려고합니다. 여기 DockPanel LastChildFill은 MinWidth로 크기를 변경합니까?

은 XAML입니다 :

<Page 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
<DockPanel> 
    <DockPanel Background="Black" VerticalAlignment="Top" LastChildFill="True" DockPanel.Dock="Top" Height="28"> 
     <ToggleButton Content="--" Visibility="Collapsed" /> 
     <StackPanel Orientation="Horizontal"> 
      <Button Content="Add" /> 
      <Button Content="Expand" /> 
     </StackPanel> 
     <StackPanel HorizontalAlignment="Right" Orientation="Horizontal"> 
      <TextBox Text="Search" MinWidth="80" Width="200" /> 
      <Button Content="X" Margin="0,1,50,0" /> 
     </StackPanel> 
    </DockPanel> 
</DockPanel> 
</Page> 

이 좋아 보인다,하지만 난 작은 폭으로 페이지 크기를 조정할 때, 마지막 자식 (검색 텍스트 상자에 StackPanel의가) 왼쪽 항목 뒤에 숨어있다. 마찬가지로 : http://s9.postimage.org/m0tkrobwd/printscreen.png MinWidth를 달성하기에 충분한 공간이 있으면 텍스트 상자의 크기가 조정되면 좋을 것입니다 ... 가능합니까?

+0

공간이 충분하고 제어가 없을 경우 가장 먼저 제어해야하는 컨트롤은 무엇입니까? – LPL

+0

다음을보십시오 : http://s10.postimage.org/wc86li3rb/concept.png 마지막 단계에서 사용 가능한 공간이 80px보다 작은 경우 전체 검색 패널이 사라져야하지만 그렇지 않은 경우에는 확인해야합니다. . 하지만 현재 검색 패널은 사용 가능한 공간이 충분한 경우에도 버튼 뒤 또는 위로 이동합니다. 이는 쓰레기입니다. – Zsolt

+0

모든 요청을 충족시키는 솔루션을 추가했습니다. – LPL

답변

0
<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="50"/> 
    </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="Auto"/> 
        <ColumnDefinition Width="Auto"/> 
        <ColumnDefinition Width="Auto"/> 
         <ColumnDefinition Width="*"/> 
        <ColumnDefinition MaxWidth="200" MinWidth="80"/> 
        <ColumnDefinition Width="Auto"/> 
       </Grid.ColumnDefinitions> 
       <ToggleButton Content="--" Visibility="Collapsed" /> 
       <Button Content="Add" Grid.Column="1"/> 
       <Button Content="Expand" Grid.Column="2"/> 
       <TextBox Text="Search" Grid.Column="4"/> 
       <Button Content="X" Margin="0,1,50,0" Grid.Column="5" /> 
      </Grid> 

도움이되기를 바랍니다.

+0

이 예제에서는 검색 컨트롤이 원하는대로 정렬되지 않았습니다. 당신은 내 개념을 볼 수 있습니다 : http://s10.postimage.org/wc86li3rb/concept.png 이 문제에 대한 쉬운 해결책이 있어야한다고 생각했는데, 생각보다 쉽지 않을 수도 있습니다. :) – Zsolt

+1

위의 솔루션을 업데이트했습니다. 복사하여 코드에 붙여 넣은 다음 요구 사항을 채웠는지 확인하십시오. – ethicallogics

+0

나는 이것을 해결책으로 사용했다. 잘 했어! 감사! – Zsolt

0

안녕하세요 TextBox Not Width의 MaxWidth 및 MinWidth를 설정하십시오. 너비를 설정하면 가장 높은 우선 순위를 가지므로 MinWidth가 작동하지 않습니다.이게 도움이되기를 바랍니다.

<Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="Auto"/> 
        <ColumnDefinition Width="Auto"/> 
        <ColumnDefinition Width="Auto"/> 
        <ColumnDefinition Width="*"/> 
        <ColumnDefinition Width="Auto"/> 
       </Grid.ColumnDefinitions> 
       <ToggleButton Content="--" Visibility="Collapsed" /> 
       <Button Content="Add" Grid.Column="1"/> 
       <Button Content="Expand" Grid.Column="2"/> 
       <TextBox Text="Search" MinWidth="80" MaxWidth="600" Grid.Column="3" ClipToBounds="True" /> 
       <Button Content="X" Margin="0,1,50,0" Grid.Column="4"/> 
      </Grid> 
+0

네, 그럴 경우 죄송합니다. * 너비가 열의 격자를 사용해야합니다. – ethicallogics

+0

고마워요.하지만 똑같은 것은 아닙니다. TextBox와 Button을 서로 다른 두 열에 배치하면 페이지 너비가 큰 경우 큰 차이가 발생할 수 있습니다. – Zsolt

+0

위의 다른 답변을 참조하십시오. 그것은 그렇게하지 않을 것입니다. – ethicallogics

0

그 이유는 페이지 크기가 페이지 스택 패널 모두를 표시하기에 충분하지 않기 때문입니다. 이를 위해 페이지의 최소 크기를 사용할 수 있습니다. 통제 숨기기의 피해를 막을 것입니다.

등 원하는 디자인을 선택할 수 있습니다. 그리드를 사용하는 대신 스택 판을 사용할 수 있습니다. 대신 그리드 Column.I에게 줄 텍스트 상자에 최대 너비와의 minWidth을주는

+0

이렇게 할 수 없습니까? 전체 페이지의 너비를 제한해야합니까? – Zsolt

+0

컨트롤을 들고있는 dockpanel의 크기를 적용 할 수도 있습니다. – JSJ

1

까다로운 것은 Control (귀하의 경우 SearchTextBox)에 정렬을 지정하지만 여전히 MaxWidth까지 사용 가능한 공간을 잡는 것입니다. this answer에게 감사드립니다.

<DockPanel> 
    <DockPanel Background="Black" DockPanel.Dock="Top" Height="28"> 
     <ToggleButton DockPanel.Dock="Left" Content="--" Visibility="Collapsed" /> 
     <StackPanel DockPanel.Dock="Left" Orientation="Horizontal"> 
      <Button Content="Add" /> 
      <Button Content="Expand" /> 
     </StackPanel> 
     <Button DockPanel.Dock="Right" Content="X" /> 
     <Border Name="Container"> 
      <TextBox Text="Search" HorizontalAlignment="Right" 
        Width="{Binding ElementName=Container, Path=ActualWidth}" MaxWidth="200" />         
     </Border> 
    </DockPanel>   
</DockPanel> 

컨테이너 다른 컨트롤을 너무 될 수 있습니다.

관련 문제