WPF - Resource

練習了一下有關資源的部分,下面是練習時的測試程式碼,有興趣的朋友可以參考看看

練習了一下有關資源的部分,下面是練習時的測試程式碼,有興趣的朋友可以參考看看

首先,很重要的一點,資源名稱是有區分大小寫的,所以像我VB用習慣了,一下要分大小寫還真的有點給他不習慣;言歸正傳,我們可以把一些通用的設定(比如說顏色)設定在資源裡面,感覺有點像Sub/Function,分門別類的管理,如果變動也是更改一個地方就可以了,比如說像是下面這樣

<Window    
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"   
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"   
    x:Class="Window1"    Title="Window1" Height="346" Width="469" Name="Window1">
    <Window.Resources>
        <SolidColorBrush x:Key="BackColor">AliceBlue</SolidColorBrush>
        <SolidColorBrush x:Key="ForeColor">Red</SolidColorBrush>
    </Window.Resources>
    <StackPanel>
        <Button Background="{StaticResource BackColor}"
                Foreground="{StaticResource ForeColor}"
                Name="Button1">Click</Button>
    </StackPanel>

</Window>

也可以將相關的設定放在外面的XAML檔案裡面,如果要這麼做的話要先新增一個"資源字典"的檔案,像是下面這張圖
 

加入之後"資源字典"檔案內容會像下面這樣

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <SolidColorBrush x:Key="BackColor">AliceBlue</SolidColorBrush>
    <SolidColorBrush x:Key="ForeColor">Red</SolidColorBrush>
</ResourceDictionary>
 
而原本的Window1的XAML Code會像下面這樣
<Window    
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"   
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"   
    x:Class="Window1"    Title="Window1" Height="346" Width="469" Name="Window1">
    <Window.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="buttonResource.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
      <!-- 
        <SolidColorBrush x:Key="BackColor">AliceBlue</SolidColorBrush>
        <SolidColorBrush x:Key="ForeColor">Red</SolidColorBrush>
       -->
    </Window.Resources>
    <StackPanel>
        <Button Background="{StaticResource BackColor}"
                Foreground="{StaticResource ForeColor}"
                Name="Button1">Click</Button>
    </StackPanel>
</Window>
 
要特別留意,如果資源名稱重複的話,可是會發生錯誤的喔。
那如果要在程式碼(xxx.vb)裡面使用定義好的資源該怎麼用呢?可以用下面的程式碼來取得
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click
        ''資源名稱是有區分大小寫的
        ''MessageBox.Show(Button1.FindResource("foreColor").GetType.Name)
        MessageBox.Show(Button1.FindResource("ForeColor").GetType.Name)
    End Sub