当我在wpf
中有多个级别或资源时,我遇到了问题例如,如果我有这个代码
main.xaml
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
>
<Style TargetType="{x:Type TextBox}" x:Key="Main">
<Setter Property="FontSize" Value="50"/>
</Style>
</ResourceDictionary>
sub.xaml
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
>
<Style TargetType="{x:Type TextBox}" x:Key="Sub" BasedOn="{StaticResource Main}">
<Setter Property="BorderBrush" Value="Red"/>
<Setter Property="BorderThickness" Value="20"/>
</Style>
</ResourceDictionary>
all.xaml
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:p19"
>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Main.xaml"/>
<ResourceDictionary Source="Sub.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
的App.xaml
<Application.Resources>
<ResourceDictionary Source="All.xaml"/>
</Application.Resources>
在主窗口我只有
<Grid>
<TextBox Style="{StaticResource Sub}"/>
</Grid>
这不会奏效。
但是,如果我将资源直接放入app.xaml(而不是通过all.xaml),就像这样
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Main.xaml"/>
<ResourceDictionary Source="Sub.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
确实有效。我想我记得有人说某处(我不记得在哪里)这是wpf中的一个错误,可以用一些空的样式和新的.net框架来解决。
我尝试了2015 rc和4.6但它仍然无法正常工作。
有人知道如何修复它以及在哪里?他们可以尝试一下代码来查看它是否有效吗?
提前感谢您的帮助
答案 0 :(得分:0)
诀窍是将这个字典依次放入合并字典中:
use Illuminate\Support\ServiceProvider;
class CustomRobotsServiceProvider extends ServiceProvider
{
public function boot()
{
}
public function register()
{
$this->app['robots'] = $this->app->share(function($app)
{
return new AppRobots();
});
}
}
应该可以正常工作。
修改强>
但是,当您尝试从另一个字典访问样式时,会遇到麻烦。要在sub.xaml中删除它的引用:
'providers' => array(
... some other providers
'Your\Namespace\CustomRobotsServiceProvider'
),