我创建了两个自定义控件,都继承自System.Windows.Controls.Button。一个叫XLButton
,另一个叫XLBox
。它们在两个单独的.xaml文件中的两个单独的ResourceDictionary
对象中具有相同的XAML样式/模板,以及相同的代码隐藏文件,除了" XLButton"出现在XLButton
文件中" XLBox"显示在XLBox
文件中,反之亦然。
我创建了一个带有两行Grid
的简单测试窗口。我将ResourceDictionary
文件合并到该测试窗口的Window.Resources
中,并创建每个自定义控件的实例,一个在顶行,一个在底部。这很好用。这是测试窗口的XAML:
<Window x:Class="ScratchPadWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:ExLuminaControls"
mc:Ignorable="d"
Title="ScratchPadWindow" Height="118" Width="145">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Styles/XLBox.xaml" />
<ResourceDictionary Source="/Styles/XLButton.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<local:XLBox Content="Hi!"/>
<local:XLButton Grid.Row="1" Content="Yeah!"/>
</Grid>
</Window>
这很好用。但是,当我注释掉ResourceDictionary.MergedDictionaries
部分并将其原始格式复制到Themes\Generic.xaml
时,它看起来像这样:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:ExLuminaControls"
mc:Ignorable="d">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Styles/XLButton.xaml" />
<ResourceDictionary Source="/Styles/XLBox.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
我得到了一个&#34;无法找到资源&style; xlbutton.xaml&#39;错误,与此行相关联:
<local:XLBox Content="Hi!"/>
这对我没有意义,但更令人困惑的是,如果我点击&#34;禁用项目代码&#34; 问题就会消失。在设计师。
我正在使用Blend 2017社区。 p>
任何人都可以帮我理解这个吗?
谢谢!
答案 0 :(得分:0)
它的路径问题,在通用时,像这样使用它
<ResourceDictionary Source="/AssemblyName;Component/Styles/XLButton.xaml" />
或者必须跟上“../../"
app.xaml,如果没有效果
[assembly:ThemeInfo( ResourceDictionaryLocation.None,//主题特定资源字典所在的位置 //(如果在页面中找不到资源,则使用, //或应用程序资源字典) ResourceDictionaryLocation.SourceAssembly //通用资源字典所在的位置 //(如果在页面中找不到资源,则使用, // app或任何主题特定的资源词典) )]
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Fluent;Component/Themes/Generic.xaml" />
...
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
定义和风格
#region --------------------CONSTRUCTORS--------------------
static WaitSpin()
{
FrameworkElement.DefaultStyleKeyProperty.OverrideMetadata(typeof(WaitSpin),
new FrameworkPropertyMetadata(typeof(WaitSpin)));
}
/// <summary>
/// LoadingAnimation constructor.
/// </summary>
public WaitSpin()
{
this.DefaultStyleKey = typeof(WaitSpin);
}
#endregion
<Style x:Key="{x:Type local:WaitSpin}" TargetType="{x:Type local:WaitSpin}">