2011-08-18 44 views
6

Tôi có cửa sổ wpf với hai liên kết người dùng bên trong, trong đó cửa sổ thứ hai chỉ hiển thị khi cần. Tôi chỉ thiết lập MinWidth của cửa sổ trong XAML, MinHeight được cung cấp thông qua databinding một tập ist phụ thuộc vào nếu usercontrol thứ hai được hiển thị. Bây giờ: Làm thế nào tôi có thể đặt kích thước của cửa sổ thành các giá trị khác với MinWidth/Height trong suốt thời gian chạy. Tôi đã thử thiết lập các giá trị trước Show(), sau Show(), trong các sự kiện khác nhau (Khởi tạo, Nạp, vv). Tôi đã thử với và không có UpdateLayout(), tôi đã cố gắng thiết lập chiều cao/chiều rộng thông qua Databinding. Không có gì hiệu quả! Nhưng khi tôi gỡ lỗi các phương pháp tiếp cận, tôi thấy rằng các thuộc tính Chiều cao/Chiều rộng của cửa sổ được đặt thành giá trị dự kiến, nhưng Độ dài ActualHeight/Chiều rộng vẫn giữ nguyên. Tôi nghĩ rằng nó sẽ là một chiếc bánh mì kẹp thịt nhưng hóa ra nó không phải là (đối với tôi). Thy cho bất kỳ sự giúp đỡ nào.Thay đổi kích thước cửa sổ wpf theo lập trình trong C#

+0

Nghe có vẻ lạ một chút. Các cửa sổ nên tôn trọng cài đặt của bạn cho chiều rộng và chiều cao. Bạn có thể đăng một ví dụ minmal? – Jens

+0

Có thể bạn đã đặt 'Window.SizeToContent' thành một cái gì đó khác với' Manual' không? Nếu vậy, 'Width' và/hoặc' Height' sẽ được tách riêng khỏi 'ActualWidth' và' AcutalHeight'. – dlf

Trả lời

8

Bạn đã cố gắng để thiết lập

Application.Current.MainWindow.Height = 100; 

Ngoài Ngắn: Tôi chỉ cần làm một bài kiểm tra ngắn, trong mã:

public partial class MainWindow : Window, INotifyPropertyChanged 
{ 

    private int _height; 
    public int CustomHeight 
    { 
     get { return _height; } 
     set 
     { 
      if (value != _height) 
      { 
       _height = value; 
       if (PropertyChanged != null) 
        PropertyChanged(this, new PropertyChangedEventArgs("CustomHeight")); 
      } 
     } 
    } 

    public MainWindow() 
    { 
     InitializeComponent(); 
     this.DataContext = this; 
     CustomHeight = 500; 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     CustomHeight = 100; 
    } 
} 

và XAML:

<Window x:Class="WindowSizeTest.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="{Binding CustomHeight, Mode=TwoWay}" Width="525"> 
<Grid> 
    <Button Click="Button_Click">Test</Button> 


</Grid> 

Nhấp vào nút Đặt chiều cao cửa sổ. Đó là những gì bạn đang tìm kiếm?

1

Bạn không có nhiều thông tin nhất định, vì vậy tôi chỉ đoán ở đây.

Cách duy nhất tôi có thể tạo lại cửa sổ không tôn trọng cài đặt chiều rộng và chiều cao là khi tôi đặt SizeToContent thành WidthAndHeight.

1

nếu ai đó vẫn đang phải vật lộn với điều này, điều duy nhất bạn phải làm là như sau:

Nếu bạn muốn thay đổi kích thước cửa sổ chính chỉ cần viết đoạn mã sau.

Application.Current.MainWindow.Height = 420; 

Nếu bạn muốn đổi kích thước cửa sổ mới không phải cửa sổ chính, chỉ cần viết mã sau vào tệp .cs của cửa sổ mới.

Application.Current.MainWindow = this; 
Application.Current.MainWindow.Width = 420; 

Hy vọng điều đó sẽ hữu ích.

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