gpt4 book ai didi

c# - 如何从 WPF 中的 DataTemplateSelector 类中的 UserControl 中查找资源?

转载 作者:太空狗 更新时间:2023-10-29 22:13:19 26 4
gpt4 key购买 nike

我正在创建自己的 UserControl,并且在 XAML 的 UserControl.Resources 部分下有两个不同的 DataTemplate。我想根据 ListView 中显示的对象的属性值在这两个数据模板之间进行选择。为此,我创建了自定义 DataTemplateSelector 类并覆盖了应该返回我希望使用的 DataTemplate 的 SelectTemplate 方法。但是,我不知道如何“找到”位于 UserControls 资源部分的数据模板,我看到的所有示例都只从 Window.Resources 中获取数据模板。在此示例中,他们获取当前的 MainWindow,然后使用 FindResource 查找 DataTemplate,如何获取我的 UserControl> 以类似的方式?:


public override DataTemplate
SelectTemplate(object item, DependencyObject container)
{
if (item != null && item is AuctionItem)
{
AuctionItem auctionItem = item as AuctionItem;
Window window = Application.Current.MainWindow;

switch (auctionItem.SpecialFeatures)
{
case SpecialFeatures.None:
return
window.FindResource("AuctionItem_None")
as DataTemplate;
case SpecialFeatures.Color:
return
window.FindResource("AuctionItem_Color")
as DataTemplate;
}
}

return null;
}

上面的例子来自这里:ItemsControl.ItemTemplateSelector Property

最佳答案

我通常在 DataTemplateSelector 的构造函数中使用 UserControl 作为参数从代码后面实例化我的 DataTemplateSelector,如下所示:

public class MyUserControl : UserControl
{
public MyUserControl()
{
Resources["MyDataTemplateSelector"] = new MyDataTemplateSelector(this);
InitializeComponent();
}
}

public class MyDataTemplateSelector : DataTemplateSelector
{
private MyUserControl parent;
public MyDataTemplateSelector(MyUserControl parent)
{
this.parent = parent;
}

public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
parent.DoStuff();
}
}

不是镇上最漂亮的女孩,但它完成了工作;)

希望这对您有所帮助!

关于c# - 如何从 WPF 中的 DataTemplateSelector 类中的 UserControl 中查找资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/916012/

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