我正在设置App.xaml类似Window的样式:
<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>
Run Code Online (Sandbox Code Playgroud)
我基本上希望每个Window都将其WindowStyle的属性值设置为None(删除默认的Windows框架和边框); 但它没有用.
我在这里错过了什么?
Qui*_*son 20
我相信你必须将样式命名并将其应用于每个窗口,如下所示.
在app.xaml/resources ..
<Style x:Key="MyWindowStyle" TargetType="Window">
<Setter Property="WindowStyle" Value="None"></Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)
然后在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}">
Run Code Online (Sandbox Code Playgroud)
这应该可行,但只是在资源中应用具有TargetType for Window的样式将不会强制Window使用该样式,尽管它似乎适用于其他元素.
编辑:
找到一些与将默认样式应用于窗口元素有关的信息.
如果提供TargetType,则该类型的所有实例都将应用样式.然而,衍生类型不会......似乎.<Style TargetType ="{x:Type Window}">将不适用于所有自定义派生/窗口.<Style TargetType ="{x:Type local:MyWindow}">将仅适用于MyWindow.所以选项是
使用您指定的键控样式作为要应用样式的每个窗口的样式属性.设计师将展示风格的窗户.
回答问题的人对从应用了样式的基本窗口继承有一个有趣的想法.
我知道这个问题已经很老了,但无论如何我都会回答.
这是在C#4.0中适合我的代码.它只是复制资源字典中所有子类的样式.
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);
}
}
Run Code Online (Sandbox Code Playgroud)
现在,App.xaml的样式应适用于所有窗口.
ps是的,我知道这不是最干净或最快的方式,但它有效.:)