WPF:使用多个资源来定位相同的元素或控件

时间:2015-03-19 19:16:05

标签: wpf xaml

我想知道是否可以使用多个资源来定位WPF中的相同元素或控件?我注意到,如果定位相同的元素,XAML文件级联和资源列表中的下一个XAML文件将超过下一个。

有可能解决这个问题吗? 我要做的是将一个XAML文件作为我的布局和定位,一个严格用于颜色。

在我的App.xaml我的资源区域中,如下所示:

  <Application.Resources>
     <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/Views/LayoutAndPositioning/LayoutAndPositioning.xaml"/>
            <ResourceDictionary Source="/Views/Theme/DefaultColors.xaml"/>

        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

要素的LayoutAndPositioning.xaml

 <Style x:Key="MyElement" TargetType="{Rectangle}">
     <Setter Property="Margin" Value="200,200,200,200" />
 </Style>

元素

的DefaultColors.xaml
  <Style x:Key="MyElement" TargetType="{Rectangle}">
    <Setter Property="Fill" Value="Green" />
     <Setter Property="Width" Value="400" />
    <Setter Property="Height" Value="200" /> 
 </Style>

但是当我尝试在2个不同的文件中定位相同的元素时。 LayoutAndPositioning.xaml是列表中的第一个,因为DefaultColors.xaml中没有位置样式,因此不适用于该元素。 DefaultColors.xaml没有保证金,因此我的元素最终没有保证金属性。

我测试了从App.xaml资源列表中取出DefaultColors.xaml并返回定位。所以这似乎是一个层叠的事情。

如果可以在2个不同的Xaml文件中定位相同的元素,是否有任何想法。

1 个答案:

答案 0 :(得分:0)

尝试执行以下操作:

  • 通过在操作DefaultColors.xaml中执行以下操作,将LayoutAndPositioning.xaml合并到DefaultColors.xaml中

    <ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="/Views/LayoutAndPositioning/LayoutAndPositioning.xaml"/>
    </ResourceDictionary.MergedDictionaries>
    
  • 从Application.Resources中删除LayoutAndPositioning.xaml

然后改变:

<Style x:Key="MyElement" TargetType="{Rectangle}">
    <Setter Property="Fill" Value="Green" />
     <Setter Property="Width" Value="400" />
    <Setter Property="Height" Value="200" /> 
 </Style>

     <Style x:Key="RectStyle" TargetType="{Rectangle}" basedOn="{StaticResource MyElement}">
        <Setter Property="Fill" Value="Green" />
         <Setter Property="Width" Value="400" />
        <Setter Property="Height" Value="200" /> 
     </Style>