2009-03-26 26 views
7

Tôi đặt một kiểu cho Window trong App.xaml như ví dụ:Làm cách nào để áp dụng kiểu cho Kiểm soát cửa sổ trong WPF?

<Application x:Class="MusicRepo_Importer.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:System="clr-namespace:System;assembly=mscorlib" StartupUri="TestMaster.xaml"> 
    <Application.Resources> 

     <Style TargetType="Window"> 
      <Setter Property="WindowStyle" Value="None"></Setter> 
     </Style> 

    </Application.Resources> 
</Application> 

Với mà tôi về cơ bản muốn mọi cửa sổ có giá trị tài sản WindowStyle của nó thiết lập để None (để loại bỏ các cửa sổ mặc định khung và biên giới); Nhưng nó không hoạt động.

Tôi thiếu gì ở đây?

Trả lời

19

Tôi tin rằng bạn phải đặt tên cho phong cách và áp dụng nó vào mỗi cửa sổ như sau ..

Trong App.xaml/nguồn lực ..

<Style x:Key="MyWindowStyle" TargetType="Window"> 
    <Setter Property="WindowStyle" Value="None"></Setter> 
</Style> 

Sau đó, trong window.xaml ..

<Window x:Class="MusicRepo_Importer.MyWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:sys="clr-namespace:System;assembly=mscorlib" 
    Title="MyStyledWindow" Style="{StaticResource MyWindowStyle}"> 

Điều này sẽ có tác dụng, nhưng sẽ không áp dụng kiểu này với mặc định làm việc cho các yếu tố khác.

Edit:
Tìm thấy một số thông tin liên quan đến việc áp dụng kiểu mặc định đến một yếu tố cửa sổ ..

Nếu bạn cung cấp một TargetType, tất cả trường hợp của loại hình đó sẽ có phong cách áp dụng. Tuy nhiên các loại có nguồn gốc sẽ không ... có vẻ như. < Kiểu TargetType = "{x: Loại cửa sổ}"> sẽ không hoạt động cho tất cả các tùy chỉnh dẫn xuất/cửa sổ của bạn. < Kiểu TargetType = "{x: Loại địa phương: MyWindow}"> sẽ chỉ áp dụng cho MyWindow. Vì vậy, các tùy chọn là

Sử dụng kiểu khóa mà bạn chỉ định làm thuộc tính Kiểu của mỗi cửa sổ bạn muốn áp dụng kiểu. Nhà thiết kế sẽ hiển thị cửa sổ được tạo kiểu.

Từ Câu hỏi: How to set default WPF Window Style in app.xaml?

Người trả lời câu hỏi đã có một ý tưởng thú vị về kế thừa từ một cửa sổ cơ sở có phong cách áp dụng.

+0

Cảm ơn thông tin chi tiết –

7

Tôi biết câu hỏi này khá cũ nhưng tôi vẫn sẽ trả lời.

Đây là mã hoạt động tốt cho tôi trong C# 4.0. Nó chỉ sao chép kiểu cho tất cả các lớp con trong từ điển tài nguyên.

public partial class App : Application 
{ 
    protected override void OnStartup(StartupEventArgs e) 
    { 
     if (this.Resources.Contains(typeof(Window))) 
     { 
      var types = Assembly.GetEntryAssembly().GetTypes(); 
      var subTypes = types.Where(x => x.IsSubclassOf(typeof(Window))); 

      Style elementStyle = (Style)this.Resources[typeof(Window)]; 

      foreach (Type subType in subTypes) 
      { 
       if (!this.Resources.Contains(subType)) 
       { 
        this.Resources.Add(subType, elementStyle); 
       } 
      } 
     } 

     base.OnStartup(e); 
    } 
} 

Bây giờ, kiểu của bạn từ App.xaml sẽ hoạt động với tất cả các cửa sổ.

p.s. Vâng, tôi biết đây không phải là cách sạch hay nhanh nhất nhưng nó hoạt động. :)

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