Пользовательский стиль сетки в Silverlight 4 - PullRequest
2 голосов
/ 20 мая 2010

Я хочу установить фон сетки, используя стиль. Я в стиле, я устанавливаю свойство фона сетки.

Но у меня есть граница, заполненная LinearGradientFill, и контур, в котором также есть LinearGradientFill.

Но я не могу объединить оба.

Ниже приведен пример кода. Я хочу создать его как стиль.

<Grid>
<Border BorderBrush="Black" BorderThickness="2">
                <Border.Background>
                    <LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5">
                        <GradientStop Color="Black" Offset="0.953" />
                        <GradientStop Color="White" Offset="0" />
                    </LinearGradientBrush>
                </Border.Background>
            </Border>
            <Path Data="M 0,0 C 0,620 10,10 560,0" Height="60" VerticalAlignment="Top">
                <Path.Fill>
                    <LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5">
                        <GradientStop Color="Black" Offset="0" />
                        <GradientStop Color="White" Offset="0.779" />
                    </LinearGradientBrush>
                </Path.Fill>
            </Path>
</Grid>

выдает ошибку как:

Свойство «Значение» задается более одного раза.

1 Ответ

4 голосов
/ 20 мая 2010

Archie,

Вам необходимо использовать шаблон для помещения произвольного XAML в стиль. К сожалению, только элементы управления имеют шаблоны, а сетки и границы не являются элементами управления. Но есть решение. Хотя не так чисто, как хотелось бы, следующий XAMl должен достичь вашей цели. Вы вставляете следующий XAML в XAML Cruncher Чарльза Петцольда чтобы увидеть результаты:

<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             Width="400" Height="400">
    <UserControl.Resources>
        <!-- A ContentControl template that defines your background -->
        <ControlTemplate x:Key="BackgroundTemplate" TargetType="ContentControl">
            <Grid>
                <Border BorderBrush="Black" BorderThickness="2">
                    <Border.Background>
                        <LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5">
                            <GradientStop Color="Black" Offset="0.953" />
                            <GradientStop Color="White" Offset="0" />
                        </LinearGradientBrush>
                    </Border.Background>
                </Border>
                <Path Data="M 0,0 C 0,620 10,10 560,0" Height="60" VerticalAlignment="Top">
                    <Path.Fill>
                        <LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5">
                            <GradientStop Color="Black" Offset="0" />
                            <GradientStop Color="White" Offset="0.779" />
                        </LinearGradientBrush>
                    </Path.Fill>
                </Path>
            </Grid>
        </ControlTemplate>
        <!-- A ContentControl Style that references the background template -->
        <Style x:Key="BackgroundStyle" TargetType="ContentControl">
            <Setter Property="Template" Value="{StaticResource BackgroundTemplate}" />
        </Style>
    </UserControl.Resources>

    <!-- Typical usage; place the background ContentControl behind your body content -->
    <Grid x:Name="LayoutRoot">
        <ContentControl Style="{StaticResource BackgroundStyle}" />
        <TextBlock Text="Your Content" Foreground="Red" FontSize="36" HorizontalAlignment="Center" VerticalAlignment="Center" />
    </Grid>
</UserControl>
...