2010-04-18 26 views
32

Đây là mã XAML của tôi:Đặt đường viền xung quanh StackPanel.

<Window x:Class="CarFinder.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="Search for cars in TuMomo" Height="480" Width="600"> 
    <DockPanel Margin="8"> 
     <Border CornerRadius="6" 
       BorderBrush="Gray" 
       Background="LightGray" 
       BorderThickness="2" 
       Padding="8"> 
      <StackPanel Orientation="Horizontal" 
        DockPanel.Dock="Top" 
        Height="25"> 
       <TextBlock FontSize="14" Padding="0 0 8 0"> 
        Search: 
       </TextBlock> 
       <TextBox x:Name="txtSearchTerm" Width="400" /> 
       <Image Source="/CarFinder;component/Images/Chrysanthemum.jpg" />    
      </StackPanel> 
     </Border> 
     <StackPanel Orientation="Horizontal" 
        DockPanel.Dock="Top" 
        Height="25"> 

     </StackPanel> 
    </DockPanel> 
</Window> 

Biên giới được thiết lập xung quanh toàn bộ cửa sổ. Và cũng có thể, khi tôi tạo một StackPanel khác, nó được thêm vào bên phải của StackPanel trước đó của tôi thay vì được thêm vào dưới nó. Lý do cho việc này là gì?

Trả lời

15

Bạn đặt DockPanel.Dock = "Top" thành StackPanel, nhưng StackPanel không phải là con của DockPanel ... Border là. Thuộc tính docking của bạn đang bị bỏ qua.

Nếu bạn di chuyển DockPanel.Dock = "Top" vào Border thay vào đó, cả hai vấn đề của bạn sẽ được cố định :)

24

gì về điều này một:

<DockPanel Margin="8"> 
    <Border CornerRadius="6" BorderBrush="Gray" Background="LightGray" BorderThickness="2" DockPanel.Dock="Top"> 
     <StackPanel Orientation="Horizontal"> 
      <TextBlock FontSize="14" Padding="0 0 8 0" HorizontalAlignment="Center" VerticalAlignment="Center">Search:</TextBlock> 
      <TextBox x:Name="txtSearchTerm" HorizontalAlignment="Center" VerticalAlignment="Center" /> 
      <Image Source="lock.png" Width="32" Height="32" HorizontalAlignment="Center" VerticalAlignment="Center" />    
     </StackPanel> 
    </Border> 
    <StackPanel Orientation="Horizontal" DockPanel.Dock="Bottom" Height="25" /> 
</DockPanel> 
+0

Trong ứng dụng WPF desktop DockPanel không tồn tại cho phần tử Border :(Tại sao vậy? – uSeRnAmEhAhAhAhAhA

+0

@uSeRnAmEhAhAhAhAhA 'DockPanel' là một phần tử theo ý riêng của nó mà bạn thêm các phần tử khác vào. Nó không phải là một thuộc tính * cho' Border' vì bạn sẽ không được ghép một đường viền - Nó đi xung quanh một đối tượng, không được gắn vào một đối tượng, giống như cách bạn có thể làm '', có hiệu quả "docks" các StackPanel (phần) một lần nữa t trên cùng của DockPanel (thùng chứa bao quát). – vapcguy