WPF中資源字典(ResourceDictionary)的使用
WPF中資源字典(ResourceDictionary)的使用
資源字典(ResourceDictionary)的使用
1、建立資原始檔
各資原始檔中,若需要引入專案中其它檔案,則可通過名稱空間引入。對應各資源元素,設定x:key值。程式碼中通過x:key值獲取相應的資源。以引數值轉換器為例。
ValueConverter.xaml
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:valueConvert="clr-namespace:AHUSelectorPlatformUI.ValueConvert">
<!--介面顯示相關-->
<valueConvert:ConvertWindMachineTypeToTreeViewSource x:Key="ConvertToTreeViewSource"/>
<valueConvert:UnitPowerConvert x:Key="UnitPowerConvert"/>
<!--........-->
</ResourceDictionary>
2、專案中引入資源
有以下兩種方法
1、WPF專案中的app.xaml檔案中,可以通過ResourceDictionary標籤,引入各類資源。如下程式碼,其中引入了自定義樣式、資料模板、窗體介面模板、數值轉換器等資源。不同的資源位於不同的檔案地址,可直接通過Source屬性連結資源路徑。
<Application x:Class="AHUSelectorPlatform.App"
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"
StartupUri="View\Login.xaml"
mc:Ignorable="d">
<Application.Resources>
<ResourceDictionary >
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Resources/Style/SimpleStyles.xaml" />
<ResourceDictionary Source="/Resources/SettingResource/ValueConverter.xaml" />
<ResourceDictionary Source="/View/Segments/DataTemplate/SegmentDataTemplate.xaml" />
<ResourceDictionary Source="/Resources/SettingResource/WindowResource.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
2、通過newResourceDictionary的方式建立資源並繫結。
public static void loadRd()
{
var brushes_rd = new ResourceDictionary()
{
Source = new Uri("pack://Application:,,,/testXml;component/dictionary.xaml")
};
Application.Current.Resources = new ResourceDictionary()
{
MergedDictionaries =
{
brushes_rd
}
};
}
3、使用資源
引入資源後,專案中則可通過各類的方法,獲取到相應的資源。
-
介面引數繫結時,可以使用引數值轉換器進行引數轉換。如下拉值轉換成文字。數值轉換成物件等。如下程式碼,BrandConvert為ValueConverter.xaml中的資源。
-
設定靜態資源來源。如下程式碼,UIDataContainer為SimpleStyles.xaml中的資源。
<ComboBox Name="FanBrand" SelectedIndex="{Binding FanBrand,Converter={StaticResource BrandConvert},Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"> <ComboBoxItem Content="{Binding StandardFanBrand, Mode=OneWay, Source={StaticResource UIDataContainer}, UpdateSourceTrigger=PropertyChanged}"/> </ComboBox>
-
設定資料繫結模板。如下程式碼,PressureDataTemplate為WindowResource.xaml中的資源。
<UserControl x:Class="AHUSelectorPlatformUI.View.Segments.DLD.BlowerFanSeg" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable="d" Height="auto" Width="300" Background="White"> <ContentControl x:Name="ContentControl" ContentTemplate="{DynamicResource PressureDataTemplate}" Content="{Binding}" /> </UserControl>
-
使用Application.Current.TryFindResource()方法獲取對應資源。
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { return Application.Current.TryFindResource(ChooseSegCodeName.WindowReflectDictionary[(SegmentID)value]) as UserControl; }
將資源全域性註冊
若定義的某個資源,需要給應用全域性使用,可以在 App.xaml 中完成註冊:
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/應用程式名;component/資源的具體路徑" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
具體實現如下:
<Application x:Class="MVVMLightDemo.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="View/BindingFormView.xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
d1p1:Ignorable="d"
xmlns:d1p1="http://schemas.openxmlformats.org/markup-compatibility/2006"
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/MVVMLightDemo;component/Assets/TextBox.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
相關文章
- WPF中的“資源”
- WPF Add ResourceDictionary file and declared in app.xamlAPP
- WPF Material Design中資源的查詢和使用Material Design
- WPF:靜態、動態資源以及資源詞典
- wpf 中阿里圖示庫的使用阿里
- WPF中Ribbon控制元件的使用控制元件
- WPF中Popup控制元件的使用控制元件
- Python中字典使用詳解Python
- [WPF]淺析資源引用(pack URI)
- 學習使用Wpf開源的文字編輯器—smithhtmleditorMITHTML
- Python:字典的使用Python
- 2.1.3 CDB中的資料字典結構
- WPF筆記4——靜態資源(StaticResource)筆記
- Redis中的字典Redis
- Python中的字典Python
- WPF 開啟資源管理器且選中某個檔案
- swift基本資料型別使用-字典使用Swift資料型別
- WPF中3D控制元件的使用3D控制元件
- Python中遍歷字典以及字典中的鍵和值Python
- wpf自定義控制元件新增引用資源控制元件
- Python中字典的操作Python
- 使用 Python 字典向 SQLite 插入資料PythonSQLite
- 2.1.3.4 資料字典儲存在CDB中
- python-字典-如何取出字典中的所有值Python
- python3 字典的使用Python
- 【翻譯】WPF中的資料繫結表示式
- 列表與字典中的坑
- python中的集合與字典Python
- WPF中如何使用後臺程式碼動態建立資料模板(DataTemplate)
- 【Dotnet 工具箱】WPF UI - 現代化設計的開源 WPF 框架UI框架
- python字典合併的使用注意Python
- 資料字典真的有用嗎?--開源軟體誕生12
- InnoDB資料字典--字典表載入
- 在.NET Core 3.0中的WPF中使用IOC圖文教程
- python中的字典是什麼Python
- 功能齊全的 WPF 自定義控制元件資源庫(收藏版)控制元件
- Python中字典dictPython
- Redis資料結構詳解(2)-redis中的字典dictRedis資料結構