在类库中使用资源字典

时间:2013-04-02 18:43:50

标签: wpf flowchart

我在我的应用程序中使用this (excellent) flowchart diagram designer,但我想将其用作UserControl

要将Application转换为UserControl,我已更改了该应用程序的唯一窗口:

<Window x:Class="DiagramDesigner.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:s="clr-namespace:DiagramDesigner"
    xmlns:c="clr-namespace:DiagramDesigner.Controls"
    WindowStartupLocation="CenterScreen"
    Title="Diagram Designer"
    Height="850" Width="1000">
  <Window.Resources>
    <ContextMenu x:Key="DesignerCanvasContextMenu">
      ...
    </ContextMenu>
  </Window.Resources>
  ...
</Window>

进入用户控件:

<UserControl x:Class="DiagramDesigner.DiagramDesignerWPFControl"
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     xmlns:s="clr-namespace:DiagramDesigner"
     xmlns:c="clr-namespace:DiagramDesigner.Controls"
     Height="850" Width="1000">
  <UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
          ...
        </ResourceDictionary.MergedDictionaries>
        <ContextMenu x:Key="DesignerCanvasContextMenu">
         ...
        </ContextMenu>
    </ResourceDictionary>
  </UserControl.Resources>
  ...
</UserControl>

我从ResourceDicctionary的内容中取出App.xaml并将其添加到控件中。然后我删除了App.xaml文件,因为它无法在Class Library编辑中使用。


我的问题是

当我将新的User Control添加到另一个项目中的WPF表单时,我可以运行新的应用程序,我可以添加图表组件并移动它们,但是当我加入/链接时,会出现以下异常:

  

找不到名为“{SolidBorderBrush}”的资源。资源名称区分大小写。

我在User Control中的资源或位置错误怎么办?


接受答案后的版本:

上升异常也指向调用'{SolidBorderBrush}'的行。我最初没有把它放在这个问题中,因为这是一个电话而不是声明。这是链接异常的代码段:

<Trigger Property="IsMouseOver" Value="true">
   <Setter TargetName="Border" Property="Background" Value="{DynamicResource ToolbarSelectedBackgroundBrush}" />
   <Setter TargetName="Border" Property="BorderBrush" Value="{DynamicResource SolidBorderBrush}" />
</Trigger>

1 个答案:

答案 0 :(得分:2)

我在这里猜测,因为你的问题实际上没有显示任何似乎导致问题的代码,但你可能需要使用DynamicResource

{DynamicResource SolidBorderBrush}

您只能在非常特殊的情况下使用StaticResource。在大多数情况下,您可以获得很大的性能提升,但很容易在无法使用的情况下结束(可能会发生这种情况)。