【问题标题】:Cannot find resource into ResourceDictionary在 ResourceDictionary 中找不到资源
【发布时间】:2020-10-15 12:45:43
【问题描述】:

我有一个常见的 ResourceDictionary,它使用 Microsoft 示例来使用黑色 ComboBox Microsoft Exemple

在执行过程中抛出异常: 例外:找不到名为“NormalBorderBrush”的资源。资源名称区分大小写。

我只想在我的通用 ResourceDictionary xaml 文件中声明这个组合框

<!-- Combo box-->
<ControlTemplate x:Key="ComboBoxToggleButton" TargetType="ToggleButton">

<Border
      x:Name="Border" 
      Grid.ColumnSpan="2"
      CornerRadius="2"
      ...
      BorderBrush="{StaticResource NormalBorderBrush}"
      BorderThickness="1" />
...
<!-- Border Brushes -->
    <LinearGradientBrush x:Key="NormalBorderBrush" StartPoint="0,0" EndPoint="0,1">
        <GradientBrush.GradientStops>
            <GradientStopCollection>
                <GradientStop Color="#CCC" Offset="0.0"/>
                <GradientStop Color="#444" Offset="1.0"/>
            </GradientStopCollection>
        </GradientBrush.GradientStops>
    </LinearGradientBrush>

NormalBorderBrush 在同一个文件中声明! 我做错了什么?

提前致谢。 埃里克

【问题讨论】:

  • 确保在使用之前声明刷子。也许只是将 Brushdeclaration 移到 ComboBox 上方
  • 您是否在App.Xaml 中添加了ResourceDictionary.xaml 文件??
  • 你是如何声明 NormalBorderBrush 的?同时显示该部分的代码。

标签: c# wpf resourcedictionary


【解决方案1】:

您定义资源的顺序很重要。

XAML 编译器从上到下处理文件以便能够在ControlTemplate 中引用NormalBorderBrush,您需要在定义模板之前定义画笔

 <LinearGradientBrush x:Key="NormalBorderBrush" ... />

 <ControlTemplate x:Key="ComboBoxToggleButton" ... />

【讨论】:

    最近更新 更多