gpt4 book ai didi

WPF:从 DataTemplateSelector 类中的 UserControl 查找资源

转载 作者:行者123 更新时间:2023-12-03 01:53:35 27 4
gpt4 key购买 nike

我知道有这个帖子:How to find a resource in a UserControl from a DataTemplateSelector class in WPF?

问同样的问题。

但是...我对答案不满意!一定有办法获取资源

包含 ContentControl/Presenter 的 UserControl 声明如下:

ContentTemplateSelector="{StaticResource MySelector}" 

每个派生的DataTemplateSelector类在其SelectedTemplate方法中都有一个参数=>

容器,其类型为 DependencyObject。

在我的例子中,容器就是内容控件。

是否不可能从“contentcontrol”开始爬上视觉树并尝试通过 FindAncestor 获取 UserControl ?

最佳答案

是的,您可以将 container 参数强制转换为 FrameworkElement 并调用 FindResourceContentPresenter 开始进行资源查找。例如:

代码:

public class MySelector
: DataTemplateSelector
{
public override DataTemplate SelectTemplate
(object item, DependencyObject container)
{
// Determine the resource key to use
var key = item.ToString() == "a" ? "one" : "two";
// Find the resource starting from the container
return ((FrameworkElement)container).FindResource(key) as DataTemplate;
}
}

XAML:

<UserControl
x:Class="WpfApplication1.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
>
<UserControl.Resources>
<DataTemplate x:Key="one">
<TextBlock>Template One</TextBlock>
</DataTemplate>
<DataTemplate x:Key="two">
<TextBlock>Template Two</TextBlock>
</DataTemplate>
<local:MySelector x:Key="MySelector"/>
</UserControl.Resources>
<StackPanel>
<ContentPresenter
ContentTemplateSelector="{StaticResource MySelector}"
Content="a"/>
<ContentPresenter
ContentTemplateSelector="{StaticResource MySelector}"
Content="b"/>
</StackPanel>
</UserControl>

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

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