2009-06-10 24 views
10

tôi muốn quấn một điều khiển hình thức cửa sổ trong một usercontrol WPFWPF WindowsFormsHost cỡ

<UserControl x:Class="MVVMLibrary.ReportViewer" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:ws="clr-namespace:Microsoft.Reporting.WinForms;assembly=Microsoft.ReportViewer.WinForms" 
    Height="Auto" Width="Auto"> 
    <Grid> 
     <WindowsFormsHost Name="Host"> 
      <ws:ReportViewer/> 
     </WindowsFormsHost> 
    </Grid> 
</UserControl> 

ý rằng chiều cao và chiều rộng là ô tô.

Khi tôi có nó trong bảng điều khiển xếp chồng hoặc lưới, nó đặt chiều cao là 0 và về cơ bản biến mất. Người dùng sau đó được yêu cầu để thay đổi kích thước cửa sổ (mà thu nhỏ vì usercontrol nói rằng tôi không cần không có không gian, cảm ơn). Khi người dùng thay đổi kích thước nó kéo dài đến bất cứ điều gì người dùng chỉ định.

Vì vậy, câu hỏi của tôi là tôi đã làm gì sai? Làm thế nào để tôi làm cho người dùng của tôi kiểm soát tất cả không gian có sẵn thay vì không yêu cầu bất kỳ không gian nào?

Trả lời

3

Tôi cũng gặp vấn đề tương tự. Cách tôi cố định nó là thay đổi kích thước của điều khiển bên trong WindowsFormsHost khi chạy.

Trong trường hợp của tôi, tôi đã sử dụng StackPanel để lưu trữ điều khiển và khi chạy, tôi đặt Chiều cao và Chiều rộng của điều khiển bên trong WindowsFormsHost thành chiều cao và chiều rộng của Stackpanel. Bạn muốn sử dụng các thuộc tính ActualHieight và ActualWidth.

Thật không may, tôi đã phải cập nhật sự kiện kích thước thay đổi nó mỗi lần cửa sổ được thay đổi kích thước.

19

Tôi tìm thấy câu trả lời hay hơn.

Sử dụng một dockPanel với LastChildFill = true và sau đó đặt bên trong WindowsFormsHost với Horizontal và Vertical Alignement để Strech, và tất nhiên điều khiển WindowsForms phải điền vào.

<DockPanel LastChildFill="true"> 
    <WindowsFormsHost HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
     <Panel Dock=Fill /> 
    </WindowsFormsHost> 
</DockPanel> 

Thưởng thức',

2

Tôi có một số loại vấn đề tương tự. Tôi đã có thể khắc phục sự cố của mình bằng cách xóa cài đặt Độ cao và Chiều cao tối thiểu và tối đa khỏi biểu mẫu winForm.

Sau đó tôi đã sử dụng DockPanel như ykatchou được đề xuất. Tôi vẫn có một số vấn đề với DPI nhưng tôi không nghĩ rằng họ sẽ quan trọng nhiều. Thật xấu xí, nhưng nó hoạt động

4

Cùng một vấn đề ở đây. Những gì tôi đã làm là để ràng buộc các điều khiển WindowsForm (mà phải được nhúng) kích thước cho các kích thước (Chiều rộng và Chiều cao) của máy chủ mẹ (ví dụ: WindowsFormHost) xem mã dưới đây. Này được thực hiện sau khi các hình thức cửa sổ được nạp:

private void Window_Loaded(object sender, RoutedEventArgs e) 
{ 
    UserWinFormControl.Height = UserWinFormControl.Parent.Height; 
    UserWinFormControl.Width = UserWinFormControl.Parent.Width; 

} 

đâu UserWinFormControl là kiểm soát được embeded/tổ chức bởi WindowsFormHost Trong XAML viết:

<Window x:Class="myAppWpf.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:WinForms="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms" 
     Title="MyApp" 
     Height="737" 
     Width="1024" 
     WindowStartupLocation="CenterScreen" 
     Loaded="Window_Loaded"> 
     <......> 
     <DockPanel LastChildFill="true"> 
         <WindowsFormsHost Name="windowsFormsHost1"DockPanel.Dock="Top" 
              Background="Yellow"   
              HorizontalAlignment="Stretch"    
              VerticalAlignment="Stretch" > 
         </WindowsFormsHost> 
     </DockPanel> 
     </....> 
</Window> 

Tất cả không tốt đang làm việc bị rung khi thay đổi kích thước ứng dụng.

+1

Cảm ơn - Bằng cách nào đó cho sự kiểm soát một màu nền giảm đáng kể các nhấp nháy của điều khiển. – Justin

4

Một số sửa đổi: DockPanel có LastChildFill được bật theo mặc định và sắp xếp theo chiều ngang và dọc cũng được đặt tự động để kéo dài.

Vì vậy, câu trả lời ngắn gọn là: Sử dụng một DockPanel

<DockPanel> 
    <WindowsFormsHost> 
    </WindowsFormsHost> 
</DockPanel> 
Các vấn đề liên quan