代码之家  ›  专栏  ›  技术社区  ›  Edward Tanguay

对于XAML样式,我有什么样的级联或多样式功能?

  •  2
  • Edward Tanguay  · 技术社区  · 16 年前

    我有一个带有“stackpanel行”的dockpanel。

    我需要每个stackpanel行获得相同的样式,但是,第一个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>
    
    1 回复  |  直到 16 年前
        1
  •  5
  •   Martin Harris    16 年前

    有一种风格 "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>
    
    推荐文章