DynamicResource无法解析

时间:2012-03-17 19:14:58

标签: wpf

我一直在努力学习资源和风格,我想创建一个无铬窗口。

我有一个例子可以通过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资源字典方式,如我在这里所介绍的那样)

最好的问候

约翰。

2 个答案:

答案 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>