Может ли <Setter.Value> иметь несколько сеток внутри него - PullRequest
0 голосов
/ 13 мая 2010

Я хочу определить фон для моего приложения в App.XAML. Фон был ранее определен на другой странице xaml, в которой есть несколько гридов, например:

<Grid x:Key="GridGeneric" d:LayoutOverrides="Width, Height">
        <Grid.Background>
            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                <GradientStop Color="#FF00172E" Offset="1"/>
                <GradientStop Color="#FF004074" Offset="0.433"/>
                <GradientStop Color="#FF081316"/>
                <GradientStop Color="#FF001D3F" Offset="0.215"/>
                <GradientStop Color="#FF002043" Offset="0.818"/>
                <GradientStop Color="#FF003B6C" Offset="0.642"/>
            </LinearGradientBrush>
        </Grid.Background>
        <Grid>
            <Grid.Background>
                <RadialGradientBrush RadiusY="0.973" GradientOrigin="0.497,-0.276" RadiusX="1.003">
                    <GradientStop Color="#FFB350EE" Offset="0"/>
                    <GradientStop Color="#001D3037" Offset="0.847"/>
                </RadialGradientBrush>
            </Grid.Background>
        </Grid>

------
-----
</Grid>

Теперь я хочу разместить то же самое в моем App.xaml, как показано ниже:

<Style x:Key="backgroundStyle" TargetType="Grid">

        <Setter Property="Background">
            <Setter.Value>
                <Grid>
                    <Grid.Background>
                        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                            <GradientStop Color="#FF00172E" Offset="1"/>
                            <GradientStop Color="#FF004074" Offset="0.433"/>
                            <GradientStop Color="#FF081316"/>
                            <GradientStop Color="#FF001D3F" Offset="0.215"/>
                            <GradientStop Color="#FF002043" Offset="0.818"/>
                            <GradientStop Color="#FF003B6C" Offset="0.642"/>
                        </LinearGradientBrush>
                    </Grid.Background>
           <Grid>
             <Grid.Background>
                <RadialGradientBrush RadiusY="0.973" GradientOrigin="0.497,-0.276" RadiusX="1.003">
                        <GradientStop Color="#FFB350EE" Offset="0"/>
                        <GradientStop Color="#001D3037" Offset="0.847"/>
                    </RadialGradientBrush>
                </Grid.Background>
            </Grid>
                         ---------
                         ---------
                </Grid>
            </Setter.Value>
        </Setter>

    </Style>

Но при этом я получаю следующее исключение.

альтернативный текст http://www.freeimagehosting.net/uploads/bb1ca0d3f6.jpg

1 Ответ

2 голосов
/ 13 мая 2010

Вы пытаетесь установить для сетки свойство фона, что невозможно. Свойство background ожидает кисть и, следовательно, исключение.

Вы можете достичь желаемого, используя DrawingBrush

В противном случае вам придется использовать вложенную сетку в окне и применить два стиля, подобные этому

Нарисуйте этот макет в вашем окне:

<Grid x:Key="GridGeneric" Background="{StaticResource OuterGridBrush}"> 
    <Grid Background="{StaticResource InnerGridBrush}"> 
    </Grid> 
</Grid> 

Перетащите это в раздел ресурсов вашего app.xaml:

<LinearGradientBrush x:Key="OuterGridBrush" EndPoint="0.5,1" StartPoint="0.5,0"> 
    <GradientStop Color="#FF00172E" Offset="1"/> 
    <GradientStop Color="#FF004074" Offset="0.433"/> 
    <GradientStop Color="#FF081316"/> 
    <GradientStop Color="#FF001D3F" Offset="0.215"/> 
    <GradientStop Color="#FF002043" Offset="0.818"/> 
    <GradientStop Color="#FF003B6C" Offset="0.642"/> 
</LinearGradientBrush> 


<RadialGradientBrush x:Key="InnerGridBrush" RadiusY="0.973" GradientOrigin="0.497,-0.276" RadiusX="1.003"> 
    <GradientStop Color="#FFB350EE" Offset="0"/> 
    <GradientStop Color="#001D3037" Offset="0.847"/> 
</RadialGradientBrush>              
...