wpf靜态資源與動态資源的差別
我的了解:一句話:靜态資源是在解釋器解釋
MainWindow.xaml
前通過
App.xaml
連結起來的定義在各個檔案内的資源;動态資源是解釋器解釋
MainWindow.xaml
時查找并加載到記憶體中的資源。
比如:
<Window x:Class="GraphElementGenerationSYS.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:GraphElementGenerationSYS"
mc:Ignorable="d"
WindowStyle="None"
AllowsTransparency="True"
ResizeMode="CanMinimize"
WindowStartupLocation="CenterScreen"
Title="MainWindow" Height="600" Width="900"
Style="{DynamicResource MainWindowStyle}">這裡用的是 DynamicResource關鍵字
<WindowChrome.WindowChrome>
<WindowChrome CaptionHeight="0"/>
</WindowChrome.WindowChrome>
<Window.Resources>
<Style TargetType="{x:Type local:MainWindow}" x:Key="MainWindowStyle">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:MainWindow">
<Border BorderThickness="1" BorderBrush="{StaticResource DarkBlue}">
<Grid Background="White">
<Grid.RowDefinitions>
<RowDefinition Height="30"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<!--Title Bar-->
<Grid x:Name="ddd" Grid.Row="0" MouseDown="Window_MouseDown" Background="{StaticResource DarkBlack}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="auto"></ColumnDefinition>
</Grid.ColumnDefinitions>
<!--Menu Button-Icon-->
<Border Grid.Column="0" Margin="5 0 0 0 ">
<Button Style="{StaticResource MenuButtonStyle}" Click="WindowMenu">
<TextBlock Foreground="White" FontFamily="{StaticResource HandWrite}" Text="GegSYS" />
</Button>
</Border>
<!--App Name-->
<Viewbox Grid.Column="1">
<TextBlock Foreground="White" FontFamily="{StaticResource HandWrite}" Text="Graph Element Generation System" />
</Viewbox>
<!--Window Button-->
<StackPanel Orientation="Horizontal" Grid.Column="2" HorizontalAlignment="Right">
<Button Style="{StaticResource WindowButtonStyle}" Click="FormMinimize">-</Button>
<Button Style="{StaticResource WindowButtonStyle}" Click="FormClose">×</Button>
</StackPanel>
</Grid>
<!--Menu List-->
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<ListBox Style="{StaticResource MenuListStyle}">
<ListBoxItem>ggg</ListBoxItem>
<ListBoxItem>dddd</ListBoxItem>
<ListBoxItem>dddd</ListBoxItem>
<ListBoxItem>dddd</ListBoxItem>
</ListBox>
</Grid>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
</Window>
這段程式中用到了
MainWindowStyle
,
DarkBlue
,
DarkBlack
,
MenuButtonStyle
,
HandWrite
,
WindowButtonStyle
,
MenuListStyle
等7個資源。他們分别定義在若幹個
.xaml
檔案中。不同的是,
MainWindowStyle
定義在
MainWindow.xaml
中,另外的那些都定義在其它檔案中。
是以,調用這些資源的方式也不同。調用
MainWindowStyle
時隻能用
DynamicResource
關鍵字,其餘的既可以用
StaticResource
關鍵字也可用
DynamicResource
關鍵字通路(但推薦這種情況下還是用
StaticResource
)。