我有一个带有“StackPanel行”的DockPanel。
我需要每个StackPanel行获得相同的样式,但是,FIRST StackPanel行应该获得一种添加样式。
在CSS中,我会使用我在XAML样式中似乎没有的级联功能。是否可能有多个样式,如下面的伪代码所示?如何在XAML样式中解决这个常见问题?
<Window x:Class="TestBinding99382.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:TestBinding99382"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<ObjectDataProvider x:Key="DataSourceCustomer" ObjectType="{x:Type local:Customer}" MethodName="GetCustomer"/>
<Style x:Key="DataRowStyleFirst" TargetType="StackPanel">
<Setter Property="Margin" Value="0 20 0 0"/>
</Style>
<Style x:Key="DataRowStyle" TargetType="StackPanel">
<Setter Property="Orientation" Value="Horizontal"/>
<Setter Property="VerticalAlignment" Value="Top"/>
<Setter Property="Margin" Value="0 0 0 0"/>
<Setter Property="DataContext" Value="{StaticResource DataSourceCustomer}"/>
<Setter Property="DockPanel.Dock" Value="Top"/>
</Style>
</Window.Resources>
<DockPanel>
<!-- PSEUDO CODE -->
<StackPanel Style="{StaticResource DataRowStyle,DataRowStyleFirst}">
<TextBlock Text="First Name:"/>
<TextBox Text="{Binding Path=FirstName}" Width="200" Margin="3 0 0 0"/>
</StackPanel>
<StackPanel Style="{StaticResource DataRowStyle}">
<TextBlock Text="Last Name:"/>
<TextBox Text="{Binding Path=LastName}" Width="200" Margin="3 0 0 0"/>
</StackPanel>
</DockPanel>
</Window>
答案 0 :(得分:5)
有一个样式"BasedOn"属性,允许简单继承样式值。
<Style x:Key="DataRowStyleFirst" TargetType="StackPanel" BasedOn="{StaticResource DataRowStyle}">
<Setter Property="Margin" Value="0 20 0 0"/>
</Style>
...
<StackPanel Style="{StaticResource DataRowStyleFirst}">
<TextBlock Text="First Name:"/>
<TextBox Text="{Binding Path=FirstName}" Width="200" Margin="3 0 0 0"/>
</StackPanel>
<StackPanel Style="{StaticResource DataRowStyle}">
<TextBlock Text="Last Name:"/>
<TextBox Text="{Binding Path=LastName}" Width="200" Margin="3 0 0 0"/>
</StackPanel>