Tôi đang cố gắng tìm hiểu cách áp dụng một chủ đề theo chương trình khi chạy trong ứng dụng Silverlight 4 của chúng tôi. Tôi đã tìm ra điều này sẽ đơn giản như tải một từ điển tài nguyên từ XAML và hợp nhất nó với các từ điển hợp nhất của ứng dụng. Dưới đây là mã của tôi cho đến nay:Tại sao XamlReader.Load không thể nhận ra thuộc tính đính kèm của tôi trong Silverlight 4?
var themeUri = new Uri(
"OurApp;component/Themes/Classic/Theme.xaml", UriKind.Relative);
var resourceInfo = GetResourceStream(themeUri);
using (var stream = resourceInfo.Stream)
{
using (var reader = new StreamReader(stream))
{
var xamlText = reader.ReadToEnd();
var dict = XamlReader.Load(xamlText) as ResourceDictionary;
Resources.MergedDictionaries.Add(dict);
}
}
Thật không may, một XamlParseException
được nâng lên trong suốt cuộc gọi đến XamlReader.Load
:
Thuộc tính gắn thêm 'Foo' không được tìm thấy trong loại 'Bar'.
Điều này được đính kèm đúng là được khai báo đúng cách và khai báo không gian tên trong XAML tham chiếu chính xác vùng tên được yêu cầu. Thuộc tính XAML đính kèm hoạt động tốt nếu được nạp vào các từ điển được hợp nhất khai báo thông qua đánh dấu App.xaml.
Dưới đây là một bản sao viết tắt của XAML mà tôi đang cố gắng để nạp trong thời gian chạy:
<ResourceDictionary xmlns:u="clr-namespace:Company.Product.Utils"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style x:Key="ControlPanelStyle" TargetType="ContentControl">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ContentControl">
<Grid Margin="0" u:Bar.Foo="True">
<!-- Stuff and things -->
<ContentPresenter Content="{TemplateBinding Content}" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
Tại sao tham chiếu đến các tài sản gắn liền không hoạt động khi nạp XAML trong thời gian chạy khi nó được chỉ làm việc tốt khi "tĩnh" được tải?