WPF – Sử dụng Resource Dictionary

resource-dictionaryResource Dictionary là một cách lưu trữ các resource theo dạng hash table. Mỗi phần tử trong resource là một đối tượng và có thể được truy xuất thông qua định danh của chúng bằng cách dùng chỉ thị x:key. Đây là một giải pháp để tách riêng các resource như template, style,… ra khỏi tài liệu XAML của bạn.

Resource Dictionary là một item template trong Visual Studio, vì vậy bạn chỉ cần Add > New Item trong Visual Studio để tạo một tài liệu .xaml mới với phần tử gốc là <ResourceDictionary>.

Trong tập tin Dictionary1.xaml, tôi tạo một Control Template cho Button vào trong ResourceDictionary:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
>
    <ControlTemplate x:Key="buttonTemplate" TargetType="{x:Type Button}">
            <Ellipse Stroke="Red" Fill="Azure"/>
    </ControlTemplate>
</ResourceDictionary>

Để sử dụng được ResourceDictionary này trong một tập tin XAML cụ thể, bạn cần tạo một ResourceDictionary mới và nhập nội dung của nó với tập tin Dictionary1.xaml bằng cách thêm vào collection ResourceDictionary.MergedDictionaries.

Với cách này, bạn có thể thấy cách khác để tạo ResourceDictionary là gán giá trị cho property Source đến tập tin xaml chứa một ResourceDictionary nguồn cần lấy dữ liệu:

<Window x:Class="ResourceDictionaryDemo.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="ResourceDictionaryDemo" Height="300" Width="300"
>
    <Window.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary
                    Source="Dictionary1.xaml">
                </ResourceDictionary>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Window.Resources>
    <Grid>
        <Button Template="{StaticResource buttonTemplate}">Hello</Button>
    </Grid>
</Window>

Ngoài ra bạn có thể nạp ResourceDictionary trong code-behind:

ResourceDictionary resources = new ResourceDictionary();
resources.Source = new Uri("Dictionary1.xaml",UriKind.RelativeOrAbsolute);

button1.Template=(ControlTemplate)resources["buttonTemplate"];

Property Source là một Pack Uri, bạn có thể xem chi tiết định dạng đường dẫn này tại: Pack URIs in WPF

Sử dụng ResourceDictionary, bạn có thể tạo được các ứng dụng đa ngôn ngữ (multi language) bằng cách kết hợp với data binding. Ngoài ra việc áp dụng theme cho ứng dụng cũng đòi hỏi bạn phải sử dụng ResourceDictionary để chỉ tới  tập tin xaml từ các assembly khác. Các bài viết sau tôi sẽ trình bày về những vấn đề này.
https://yinyangit.wordpress.com

Bài liên quan:

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s