嵌套WPF样式上的Cant访问样式

时间:2018-08-15 16:10:28

标签: c# wpf styles

我已对表单进行了通用化,并为每种类型的表单设计了通用样式:

 <Style TargetType="UserControl" x:Key="ViewForm">
     <Setter Property="Padding" Value="18"></Setter>
     <Style.Resources>
         <Style TargetType="TextBlock">
             <Setter Property="FontFamily" Value="{StaticResource IranSans}"/>
             // ...
         </Style>

         <Style TargetType="TextBlock" x:Key="Right">
             <Setter Property="FontFamily" Value="{StaticResource IranSans}"/>
         </Style>

         <Style TargetType="TextBlock" x:Key="Left">
             <Setter Property="FontFamily" Value="{StaticResource IranSans}"></Setter>
             // ...
         </Style>

         <Style TargetType="Label">
             <Setter Property="FontFamily" Value="{StaticResource IranSans}"/>
             // ...
         </Style>
     </Style.Resources>
 </Style>

我正在UserControls中使用它,我希望能够为Left使用RightTextBlock样式,但是我无权访问它们。例如:

 <TextBlock Grid.Row="3" Style="{StaticResource Right}">Email :</TextBlock>

***对于那些没有x:Key="SomeKey..."

的样式,一切正常

我该怎么办?

1 个答案:

答案 0 :(得分:0)

用户控件“资源”和用户控件“样式资源”是两件不同的事情。用户控件的嵌套控件(如文本框,标签)将有权访问“资源”而不是“样式资源”。

所以正确的方法是-

<UserControl>
<UserControl.Resources>
  <!-- Place all styles that you want to put over child controls -->
</UserControl.Resources>
<UserControl.Style>
  <Style>
        <Style.Resources>
             <!-- Place all styles that you want to use within this style -->
        </Style.Resources>
   </Style>
</UserControl.Style>
</UserControl>