如何使这样的风格可重复使用?

时间:2012-01-05 03:59:30

标签: c# silverlight xaml

我设计了我的叠加弹出窗口,这基本上就是这样的UserControl:

<Grid VerticalAlignment="Center" HorizontalAlignment="Center" MaxWidth="400" MinHeight="150" MinWidth="250">
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="42" />
                <RowDefinition Height="*" />
            </Grid.RowDefinitions>

            <Path Grid.ColumnSpan="2" Data="M0,26 L27,26 L27,0 L26,0 z" Fill="#FFFFFF" />
            <Border Background="#FFFFFF" Margin="27, 0, 0, 0" />
            <Image 
                Source="/Infrastructure.SL;component/Images/img_logo.png" 
                Height="24" HorizontalAlignment="Left" Margin="15,0,0,0" />
            <Image 
                Source="/Infrastructure.SL;component/Images/img_tab_ornament.png"
                Height="26" HorizontalAlignment="Right"/>

            <Border Grid.Row="1" Grid.RowSpan="3" BorderThickness="1" BorderBrush="#23ceff">
                <Border.Effect>
                    <DropShadowEffect Opacity="0.75" Direction="-45" Color="Black" ShadowDepth="3"/>
                </Border.Effect>
            </Border>

            <Border Grid.Row="2" Margin="1,0,1,1" Grid.RowSpan="2">
                <Border.Background>
                    <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                        <GradientStop Color="#fcfff4"/>
                        <GradientStop Color="#cfddea" Offset="1"/>
                    </LinearGradientBrush>
                </Border.Background>
            </Border>

            <my:DitatToolbar Grid.Row="1" Mode="Ok" Margin="1, 0, 1, 0" CaptionsOrientation="Horizontal"/>            

            <Image 
                Grid.Row="2" Height="32" Width="32" 
                VerticalAlignment="Bottom" HorizontalAlignment="Center" 
                Source="{Binding InteractionIconSource}"  />

            <TextBlock Grid.Row="3" Foreground="#3c3c3c" Text="{Binding Message}" HorizontalAlignment="Center" TextWrapping="Wrap" Margin="10" />
        </Grid>

我需要设计一些像这样的微小差异的窗口。大部分XAML都可以重用,但我不知道如何处理它。这里唯一独特的XAML是

<my:DitatToolbar Grid.Row="1" Mode="Ok" Margin="1, 0, 1, 0" CaptionsOrientation="Horizontal"/>            

                <Image 
                    Grid.Row="2" Height="32" Width="32" 
                    VerticalAlignment="Bottom" HorizontalAlignment="Center" 
                    Source="{Binding InteractionIconSource}"  />

                <TextBlock Grid.Row="3" Foreground="#3c3c3c" Text="{Binding Message}" HorizontalAlignment="Center" TextWrapping="Wrap" Margin="10" />

其他一切都是铬。我真的想把它放在一个地方。我可以在Silverlight中使用什么来实现这种重用?

我觉得我需要创建基本控件并继承但不熟悉XAML方面。我的代码背后几乎是空白的,我正在使用MVVM

1 个答案:

答案 0 :(得分:0)

有很多方法。最佳答案可能取决于您应用的总体要求。

更广泛意义上的快速且可能有用的方法是使用框架。要试用它,请创建一个新的Silverlight项目并选择“Silverlight导航应用程序”模板。

查看MainPage.xaml。您可以将chrome放在那里,然后以与home.xaml等相同的方式实现所有特定的屏幕。如果您需要功能,框架/导航框架非常好。它可以与浏览器集成,并允许适当的深层链接到屏幕。

编辑:这是一些工作,但创建一个ContentCtronol并不太复杂。有点难以解释这里的一切,但这个链接应该可以解决问题:http://10rem.net/blog/2010/02/05/creating-customized-usercontrols-deriving-from-contentcontrol-in-wpf-4