Chủ nhật, ngày 21 tháng 1 năm 2018

WPF – Sử dụng Resource Dictionary

Ngày đăng: 26/3/2012, 8:39:24PM | Lượt xem: 5,965
Hot!

Resource 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-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.

http://yinyangit.wordpress.com

Bài liên quan:

 Chia sẻ qua: 
Hot!
Ý kiến bạn đọc

These items will be permanently deleted and cannot be recovered. Are you sure?

Gallery

image

Maecenas viverra rutrum pulvinar

Maecenas viverra rutrum pulvinar! Aenean vehicula nulla sit amet metus aliquam et malesuada risus aliquet. Vestibulum rhoncus, dolor sit amet venenatis porta, metus purus sagittis nisl, sodales volutpat elit lorem…

Read more

Text Links

Thiết kế logo chuyên nghiệp Insky
DAFABET
W88 w88b.com/dang-ky-tai-khoan-w88
W88
ca do bong da online
Copyright © 2011 - 2012 vietshare.vn by phamkhuong102@gmail.com doanhkisi2315@gmail.com. All rights reserved.