我在不同项目之间分享常见样式时遇到一些问题。这是我的项目: -
“Common”和“Core app”位于同一解决方案中,而“Plugin”则属于自己的解决方案。
“核心应用”项目中的样式工作正常 - 它引用了“Common”项目,并在App.xaml中有以下内容: -
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Common;component/MyStyles.xaml" />
</ResourceDictionary.MergedDictionaries>
在“核心应用程序”项目中编辑XAML文件时,我会在样式名称上获得智能感知,没有波浪形的下划线,并且在运行时一切正常。
问题与“插件”项目有关。我引用了“Common”程序集,并创建了一个\ Themes \ Generic.xaml文件,其中包含与上面相同的合并XAML。 Generic.xaml的构建操作为“Page”,我在AssemblyInfo.cs中添加了以下内容: -
[assembly: ThemeInfo(ResourceDictionaryLocation.None,
ResourceDictionaryLocation.SourceAssembly)]
当我在这个“插件”项目中编辑用户控件的XAML时,“Common”程序集中的样式不会显示在intellisense中,而VS / Resharper会在其名称下面添加一条波浪线。我甚至直接将样式添加到Generic.xaml,但UC也看不到。用户控件看起来像这样: -
<UserControl ..blah..>
<StackPanel>
<TextBlock Style="{StaticResource AStyleInCommonAssembly}" Text="Hello"/>
<TextBlock Style="{StaticResource AStyleInGenericXaml}" Text="World"/>
</StackPanel>
</UserControl>
在运行时,WPF 正确应用驻留在“Common”程序集中的样式(我猜它是由于App.xaml中的字典合并而找到它们)。但是它仍然无法找到我直接添加到Generic.xaml的样式。
我错过了什么?这种方法是否只适用于自定义控件,而不是我正在处理的用户控件?我的首要任务是让事情在运行时运行,但获得设计时/智能感知经验将是一个额外的好处。
答案 0 :(得分:4)
解决。似乎使用generic.xaml的技术仅适用于自定义控件,而不适用于用户控件。用户控件无法访问generic.xaml中定义的样式(直接或从其他程序集合并)。
在意识到这一点之后,我回到合并用户控件本身内部的外部程序集资源字典,即:
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Common;component/MyStyles.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
在每个UC中不是必须这样做,但我可以在我的场景中使用它,因为我在这些“插件”项目中只有一两个。
在这样做的过程中,我确实发现了另一个问题,以下内容可能有助于将来的某些人。我的“Common”程序集中的MyStyles.xaml
文件不包含自己的样式 - 它只是合并了该程序集中的许多其他资源字典。这样做是为了方便,这意味着消费者只需要在MyStyles.xaml中合并,而不是在该程序集中合并十几个单独的XAML。
事实证明,WPF中存在一个错误,即“嵌套”合并的字典无法正确解析。我发现如果我直接在MyStyles.xaml中放置一个样式,用户控件将找到它。但是它拒绝识别MyStyles.xaml合并的词典中的任何样式!我现在已经删除了MyStyles.xaml,并且已经重新合并到各个字典中(来自用户控件XAML) - 一切都在设计时和运行时都有效。
答案 1 :(得分:0)
您还可以定义一个UserControlBase
,您的所有UC都将从该csv_df = pd.read_csv("adsf.csv")
custom_df=csv_df[["column_name1","column_name2"]]
custom_df.head() # this show chosen columns
派生,然后合并其中的所有样式。