1

我在我的应用程序中使用这个(优秀的)流程图设计器,但我想将它用作UserControl.

要将其转换ApplicationUserControl我更改了应用程序唯一的窗口:

<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>
4

1 回答 1

2

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

{DynamicResource SolidBorderBrush}

您只能在非常特殊的情况下使用 StaticResource。大多数时候你会得到很大的性能提升,但很容易最终陷入无法使用的情况(这可能是已经发生的事情)。

于 2013-04-02T19:49:54.877 回答