我设计了我的叠加弹出窗口,这基本上就是这样的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
答案 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