WPF如何讓控件隨着窗口大小而變化,布局不亂


  利用WPF中的ViewBox容器空間。ViewBox是一個容器空間,它會自動縮放容器中的子空間以填滿自身,同時它只能有一個子控件。不過,我們可以把Canvas控件作為ViewBox控件的子控件。然后在Canvas控件中布局其他的控件。

  先看看下面的窗口的Xaml文件

  <Window x:Class="Window1"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    Title="WPFTest"

    mc:Ignorable="d"

    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 

    SizeToContent="Manual" Width="400" Height="300">
    <DockPanel  Name="DockPanel1"  LastChildFill="True">
      <Menu Height="23" Name="Menu1"  DockPanel.Dock="Top">
        <MenuItem Header="Menu1">
          <MenuItem Header="H1" />
          <MenuItem Header="H2" />
        </MenuItem>
          <MenuItem Header="Menu2">
          <MenuItem Header="L1" />
          <MenuItem Header="L2" />
          <Separator />
          <MenuItem Header="L4" />
        </MenuItem>
      </Menu>
      <StatusBar Height="23" Name="StatusBar1"  DockPanel.Dock="Bottom">
        <StatusBarItem Content="S1" Name="S1"/>
        <StatusBarItem Content="S2" Name="S2"/>
        <StatusBarItem Content="S3" Name="S3"/>
      </StatusBar>
      <Viewbox  Name="Viewbox1" Stretch="Fill">
        <Canvas Height="200" Name="Canvas1" Width="300" Background="#FF8EDE75">
          <Button Canvas.Left="43" Canvas.Top="40" Content="Button" Height="37" Name="Button1" Width="87" />
        </Canvas>
      </Viewbox>
    </DockPanel>
  </Window>

 

最外面的是Window容器,設置了標題(WPFTest)和大小(400×300),它也只能有一個子控件。

  Window的子控件是DockPanel容器,是自動停靠容器控件。設置LastChildFill="True",表示最后一個子控件自動填充剩余的空間。沒有設置大小,默認大小是Window的客戶區大小。

  DockPanel控件有三個子控件

    Menu控件:菜單控件,自動停靠在容器的頂端

    StatusBar控件:狀態欄控件,自動停靠在容器的底部

    ViewBox控件:容器控件,自動填充DockPanel剩余的控件。沒有設置大小,為填充的大小。設置填充的模式為Fill,表示子控件填充自身的容器的大小

      在ViewBox中放置了一個Canvas控件,設置了大小(注:一定要設置大小,否則默認時會產生各種不可思議的效果),設置了背景色

      在Canvas中放置了一個Button控件。只是示例,Canvas中還能放置其他的控件

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM