2010-02-27 36 views
5

Tôi có một hộp văn bản và dữ liệu bên trong một dockpanel nằm trong hộp nhóm WPF.WPF: Chiều cao động GroupBox

<GroupBox Margin="8,142.04,1.783,230.4" Height="Auto" Header="Desired Meeting Outcomes (decisions or actions)?" MaxWidth="635" MinWidth="550" FontWeight="Bold" FontSize="13.333" BorderBrush="#FFD5DFE5" MinHeight="106" VerticalContentAlignment="Stretch"> 
     <DockPanel Margin="0"> 
      <local:TextboxControl Margin="0" d:LayoutOverrides="Height, HorizontalMargin" Width="538.217" VerticalAlignment="Top" HorizontalAlignment="Left" DockPanel.Dock="Top"/> 
      <local: Height="Auto" HorizontalAlignment="Left" MinHeight="25" MinWidth="538" DockPanel.Dock="Top"/> 
     </DockPanel> 
    </GroupBox> 

Tôi đang thêm hàng trong DataGrid dynmaically từ hộp văn bản làm cho DataGrid phát triển. Tuy nhiên, chiều cao của groupbox của tôi không tăng tự động mặc dù chiều cao của nó được đặt thành Tự động. Làm thế nào tôi có thể nhận được hộp nhóm của tôi để phát triển và thu nhỏ dựa trên kích thước của nội dung mà nó nắm giữ?

Trả lời

7

Bạn có lề được đặt trên tất cả 4 mặt bằng VerticalAlignment of Stretch. Trong một Grid này về cơ bản sẽ cung cấp cho bạn một GroupBox có kích thước với cha mẹ của nó nhưng không phải nội dung của nó. Loại bỏ lề từ bên phải và dưới cùng và thay đổi VerticalAlignment thành Top.

Lề là thứ tự của L, T, R, B. Vì vậy, không ra khỏi hai số cuối cùng. Height = Auto và VerticalContentAlignment = Stretch là các giá trị mặc định để bạn có thể loại bỏ chúng. Cố gắng giữ cho XAML càng sạch càng tốt.

Rõ ràng từ đánh dấu bạn đang sử dụng trình thiết kế của Blend hoặc Visual Studio. Tôi sẽ đề nghị sử dụng nhà thiết kế cho chế độ "xem trước" thay vì chỉnh sửa. Mặc dù nó nhận được tốt hơn nhiều tôi tìm thấy hành vi bố trí của các nhà thiết kế trong cả hai sản phẩm rất bực bội. Làm quen với việc tạo XAML bằng tay trả cổ tức trong thời gian dài.

VÍ DỤ

Theo ý kiến, tôi thêm một ví dụ về cách bạn sẽ có một DataGrid gây yếu tố mẹ của nó để tự động phát triển dựa trên chiều cao. Lưu ý rằng chỉ có chính Window có kích thước cố định. Đối với một cửa sổ, nếu bạn muốn làm cho nó phát triển dựa trên chiều cao, bạn có thể đặt SizeToContent = Height. Lưu ý cách bạn chỉ cần đặt VerticalAlignment = Top trên phần tử ngoài cùng.

MainWindow.xaml

<Window x:Class="WpfApplication2.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Width="640" Height="480"> 
    <Grid x:Name="LayoutRoot" Background="Green" VerticalAlignment="Top"> 
     <Border Margin="5" BorderBrush="Yellow" BorderThickness="4"> 
      <GroupBox Header="Data Grid" Background="Orange"> 
       <DataGrid x:Name="dg" AutoGenerateColumns="True" /> 
      </GroupBox> 
     </Border> 
    </Grid> 
</Window> 

MainWindow.xaml.cs

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 

     var items = new ObservableCollection<DateTime>(); 
     dg.ItemsSource = items; 

     var timer = new DispatcherTimer(); 
     timer.Interval = TimeSpan.FromSeconds(2); 
     timer.Tick += (s, e) => items.Add(DateTime.Now); 
     timer.Start(); 
    } 
} 
+0

đó đã làm việc tuyệt vời và tôi đã có thể áp dụng điều này với phần còn lại của các điều khiển trong lưới. Tuy nhiên, tôi có thêm một câu hỏi cho bạn. LayoutRoot cho GroupBox của tôi là một Grid. Ngay bây giờ nếu GroupBox của tôi quá lớn thì phần dưới được cắt bởi LayoutRoot. Tôi cố gắng để thay đổi kích thước wpf tổng thể của tôi dựa trên nội dung. Tôi đã cố gắng áp dụng cùng một logic cho groupbox nhưng nó không hoạt động. –

+0

My UserControl được lưu trữ dưới dạng một khu vực liền kề của biểu mẫu e-mail của Outlook. Tôi có cần đặt trình kích hoạt khi chiều cao của điều khiển người dùng thay đổi không? –

+0

Có, vùng Outlook sẽ không tự động thay đổi kích cỡ. Bạn sẽ cần phải sử dụng mã sự kiện để giữ mã đó đồng bộ hóa. – Josh

1

Vùng chứa của GroupBox là gì? Nó có thể ngăn nó phát triển.

Ví dụ: nếu vùng chứa là Windows, nó có SizeToContent = "Chiều cao" không?

Các vấn đề liên quan