gpt4 book ai didi

c# - ResourceDictionary.MergedDictionaries 的不同使用方式

转载 作者:行者123 更新时间:2023-12-03 13:39:52 25 4
gpt4 key购买 nike

我正在浏览我们产品中的一些代码,看到一些同事以我以前从未见过的方式使用 ResourceDictionary.MergedDictionaries:

    <UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<toolTips:ToolTips />
<styles:ControlStyles />
<icons:IconDictionary />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
tooltips:ToolTips MergedDictionaries 中的所有其他元素都是 ResourceDictionaries。
根据互联网使用这些的常规方法是使用 <ResourceDictionary Source="uri to your xaml file"/> .
那么两者之间有什么实际区别吗?
如果这种方式有效,为什么不更频繁地使用它,因为它可以很好地完成代码完成?

最佳答案

我用过 ResourceDicionary这种方式在一个大项目中只有一次,这对我的情况是有益的。
假设您有 ResourceDictionaryMyDictionary.xaml文件。

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="YourNamespace.MyDictionary">
</ResourceDictionary>
您可以添加 x:Class归因于 ResourceDictionary元素并指定代码隐藏类的完全限定名称。
让我们创建 MyDictionary.xaml.cs与类(class) MyDictionary (名称可以与 xaml 文件的名称不同)。
public partial class MyDictionary
{
public MyDictionary()
{
InitializeComponent();
}
}
一个类必须是一个部分类。必须将构造函数添加到类和 InitializeComponent方法必须被调用。 InitializeComponent如果您设置 x:Class,将自动为该类生成方法 MyDictionary.xaml 中的属性
现在您可以引用 MyDictionaryMergedDictionaries
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<local:MyDictionary/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
如果你添加一些 DataTemplate进入 MyDictionary.xaml您可以在代码隐藏中创建事件处理程序(处理程序将由 VS 自动生成)
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="YourNamespace.MyDictionary">
<DataTemplate x:Key="MyTemplate">
<Button Click="Button_Click"/>
</DataTemplate>
</ResourceDictionary>
代码隐藏:
public partial class MyDictionary
{
public MyDictionary()
{
InitializeComponent();
}

private void Button_Click(object sender, System.Windows.RoutedEventArgs e)
{
// custom logic
// edit another element, etc.
}
}
如果类继承自 ResourceDictionary类然后可以从代码隐藏访问其他资源。 MyDictonary中定义的数据模板的使用示例:
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<local:MyDictionary/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<Grid>
<ContentControl ContentTemplate="{StaticResource MyTemplate}"/>
</Grid>
在我看来最大的优点是可以将逻辑封装到单独的文件中(在大项目中很容易维护和添加新功能)并且避免引用 ResourceDictionaries来自 <ResourceDictionary Source="uri to your xaml file"/> .

关于c# - ResourceDictionary.MergedDictionaries 的不同使用方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65813501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com