我一直在努力学习资源和风格,我想创建一个无铬窗口。
我有一个例子可以通过xaml的以下简单提取来实现我想要的东西。
我在Themes / Generic.xaml中有一个资源集
<Style x:Key="BorderlessWindowStyle" TargetType="{x:Type Window}">
<Setter Property="AllowsTransparency" Value="true" />
<Setter Property="WindowStyle" Value="None" />
<Setter Property="ResizeMode" Value="CanResizeWithGrip" />
<Setter Property="Background" Value="Transparent" />
</Style>
我有一个主窗口:
<Window x:Class="Project1.Shell"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Project1"
x:Name="Window"
Title="Shell" Height="576" Width="1024" Style="{DynamicResource BorderlessWindowStyle}">
<Grid></Grid>
但样式没有被应用,VS设计师说它无法解析资源。
我一直在看的例子是这样做的,我无法发现我所看到的和我想做的事情之间的区别。
我认为Genric.xaml是一个'特殊'资源字典,应该可以通过我的Window控件发现 - 而且我猜这个假设是我的错误。
我需要做些什么来完成这项工作? (现在我明白我可以直接在Window xaml中设置这些属性了,我已经这样做了,并且得到了我想要的效果。但是我真的想要使用Generic.xaml资源字典方式,如我在这里所介绍的那样)
最好的问候
约翰。
答案 0 :(得分:7)
主题/ generic.xaml文件自动用于查找自定义控件的默认样式。在您的情况下,您有一个具有自定义样式的普通窗口。您无法在Window.Resources
部分中定义此样式,因为样式应在更高级别定义。唯一更高级别的Window是App.xaml,因为Window实际上是它的子级。这就是为什么您的问题的解决方案是将样式放入App.Resources
部分。
答案 1 :(得分:0)
以为我会添加以下示例,以防它帮助其他人。要将资源字典添加到app.xaml文件,您可以将以下xaml代码添加到app.xaml文件中。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="myContent">
<p>My Jquery enabled page</p>
</div>
<br>
<div id="divTable">
<table>
<tr>
<!--table heading-->
<th>Company</th>
<th>Contact</th>
<th>Country</th>
</tr>
<tr>
<td>Alfreds Futterkiste</td>
<td>Maria Anders</td>
<td>Germany</td>
</tr>
<tr>
<td>Centro comercial Moctezuma</td>
<td>Francisco Chang</td>
<td>Mexico</td>
</tr>
<tr>
<td>Ernst Handel</td>
<td>Roland Mendel</td>
<td>Austria</td>
</tr>
<tr>
<td>Island Trading</td>
<td>Helen Bennett</td>
<td>UK</td>
</tr>
<tr>
<td>Laughing Bacchus Winecellars</td>
<td>Yoshi Tannamuri</td>
<td>Canada</td>
</tr>
<tr>
<td>Magazzini Alimentari Riuniti</td>
<td>Giovanni Rovelli</td>
<td>Italy</td>
</tr>
</table>
</div>
其中'Resources'可以作为项目中包含资源字典文件(ResourceFile.xaml)的文件夹。
您可以将代码添加到资源字典中,如下所示:
<Application x:Class="ProjectX.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ProjectX"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<!-- Use the Black skin by default -->
<ResourceDictionary Source="Resources\ResourceFile.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
最后,动态绑定到您的资源字典,执行以下操作:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ProjectX.Resources">
<!-- The Background Brush is used as the background for the Main Window -->
<SolidColorBrush x:Key="MainBackgroundBrush" Color="#FF202020" />
</ResourceDictionary>