programing

크기 조정 후 확장기의 내용에 맞게 WPF 창의 크기를 유지하는 방법

testmans 2023. 5. 5. 08:44
반응형

크기 조정 후 확장기의 내용에 맞게 WPF 창의 크기를 유지하는 방법

에 WPF가 표시되어 SizeToContent="Height"에는 이창는다포다니됩함이 있습니다.<Expander />최근 활동 목록을 표시합니다.제가 원하는 것은 익스팬더를 확장할 때 창 크기가 비례하여 커집니다.숨기면 창 크기가 비례하여 다시 조정됩니다.창 크기가 조정되고 창에 포함된 목록 보기가 새 공간을 사용하도록 커져야 합니다.(여기 있는 색깔은 신경쓰지 말고 제가 이해에 도움이 됩니다.

일반 보기

alt 텍스트 http://www.deploylx.com/so/wpfexpander/Open.png

접힘

alt 텍스트 http://www.deploylx.com/so/wpfexpander/Closed.png

새 공간으로 크기 조정

alt 텍스트 http://www.deploylx.com/so/wpfexpander/Expanded.png

지금까지 이것은 잘 작동합니다.문제는 다음과 같은 경우에 발생합니다.<Expander />창 크기가 조정된 후 축소됩니다.창이 다시 축소되는 대신 목록 보기가 숨겨집니다.

크기 조정 후 축소

alt 텍스트 http://www.deploylx.com/so/wpfexpander/Collapsed.png

제 직감은 제게 다음과 같은 것을 말해줍니다.Height윈도우의 크기가 조정될 때 윈도우의 크기가 설정되고 있으므로 윈도우의 크기가 오버라이드됩니다.SizeToContent 합니까창 크기를 조정한 후 창 크기를 내용에 맞게 유지하려면 어떻게 해야 합니까?

현재 XAML:

<Window x:Class="DeployLX.Licensing.Nlm.Admin.v3.DashboardWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Dashboard" Width="504" SizeToContent="Height" Height="275">

  <DockPanel>
    <Menu DockPanel.Dock="Top">
      <MenuItem Header="_File">
        <MenuItem Header="E_xit" Command="{Binding Path=CloseCmd}" />
      </MenuItem>
    </Menu>
    <Grid DockPanel.Dock="Top" Margin="8" ShowGridLines="True">
      <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition />
      </Grid.RowDefinitions>
      <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition />
      </Grid.ColumnDefinitions>

      <Grid Grid.RowSpan="2" Grid.Row="0" Grid.Column="0" Margin="0,0,8,0">
        <Rectangle Fill="Red" />
        <TextBlock>ActiveCount</TextBlock>        
      </Grid>

      <Grid Grid.Row="0" Grid.Column="1" Margin="0,0,0,4">
        <Rectangle Fill="Green" />
        <TextBlock>Authorization</TextBlock>
      </Grid>
      <Grid Grid.Row="1" Grid.Column="1" Margin="0,4,0,0">
        <Rectangle Fill="Blue" />
        <TextBlock>Authorization</TextBlock>
      </Grid>      
    </Grid>
    <Expander Header="Recent Activity" Margin="8" IsExpanded="True">
      <ListView IsSynchronizedWithCurrentItem="True" MinHeight="100">
        <ListView.View>
          <GridView>
            <GridViewColumn Header="Status"/>
          </GridView>
        </ListView.View>
      </ListView>
    </Expander>
  </DockPanel>
</Window>

업데이트: 확장기의 축소된 이벤트를 듣고 Windows를 재설정해 보았습니다.SizeToContent가 있어요.거의 효과가 있어요.그러면 창이 다시 접히지만 다시 펼치면 원래의 100픽셀 높이로 돌아갑니다.이 정보를 저장하고 캡처하는 것은 가능하지만, 냄새가 이상하고 오류가 발생하기 쉽습니다.

SizeToContent를 사용하려면 창 크기를 조정할 수 없도록 만들어야 합니다.또한 SizeToContent=를 사용하면 안 됩니다."높이"를 선택한 다음 명시적인 높이를 설정합니다.WPF가 창 높이, 사용자 설정 또는 콘텐츠 중 어느 것을 믿어야 하는지 생각해 보십시오.그냥 둘 사이를 왔다 갔다 할 수는 없습니다.

대응하는 가장 쉬운 방법은 다음과 같이 설정하여 수동 크기 조정을 방정식에서 제거하는 것입니다.ResizeMode="NoResize"창문에하지만, 만약 당신이 가지고 있다면.WindowStyle="None"Vista Aero에서는 창이 "크롬"을 완전히 제거하고 창이 어색하게 보인다는 것을 알게 되었습니다.또한, 사용자에게 크기 조정 기능을 제공하고 싶어하는 것처럼 보이기 때문에 다소 당황스럽습니다.

문제는 당신이 항상 원하는 두 가지 상반된 목표를 가지고 있다는 것입니다: 1.)SizeToContent="Height"확장기 컨트롤을 접을 때, 2.) 원하는SizeToContent="Height"사용자가 창 크기를 수동으로 조정하지 않은 경우(SizeToContent="Manual"), 이 경우 사용자의 수동 높이로 되돌리려고 할 경우.

네. 확장된 키를 직접 저장할 수는 없을 것 같습니다.WPF는 사용자가 다시 시작한 후 확장 시 사용자의 수동 높이를 기억하지 못합니다.SizeToContent="Height"접힌 이벤트 핸들러에 있습니다.

이것을 사용해 보십시오. 필요에 부합해야 합니다.

<Window ...
        SizeToContent="WidthAndHeight"  
        Height="Auto" 
        Width="Auto">

창 본문을 보기에 넣은 다음 보기를 유일한 자식으로 표시하면 비슷한 문제가 해결됩니다.

가장 바람직한 해결책은 아니지만, 효과가 있는 것 같습니다.

질문에서 확인한 바와 같이 높이를 두 배로 설정합니다.NaN은 SizeToContenthappiness로 재설정합니다.하지만 그것이 당신의 익스팬더의 크기를 기억할지는 모르겠습니다.켄트의 크기 조정 컨트롤을 사용하여 크기 조정 동작을 포함 창이 아닌 확장기로 이동할 수 있습니다.

언급URL : https://stackoverflow.com/questions/841767/how-do-you-keep-the-wpf-window-sized-to-content-with-an-expander-after-resize

반응형