Какие виды каскадных или множественных стилей у меня есть со стилями XAML? - PullRequest
2 голосов
/ 11 мая 2009

У меня есть DockPanel с «рядами StackPanel».

Мне нужна каждая строка 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 Ответ

5 голосов
/ 11 мая 2009

Существует свойство style "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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...