在几个级别的wpf中查找资源

时间:2015-07-15 17:17:08

标签: c# wpf xaml

当我在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但它仍然无法正常工作。

有人知道如何修复它以及在哪里?他们可以尝试一下代码来查看它是否有效吗?

提前感谢您的帮助

1 个答案:

答案 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'
),