【问题标题】:ContentControl is not picking up template though DynamicResourceContentControl 没有通过 DynamicResource 获取模板
【发布时间】:2014-10-29 03:59:31
【问题描述】:

我正在尝试让这个示例正常工作。我创建了一个新的 WPF 自定义控件库项目,在 Generic.xaml 中我有以下代码

<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfCustomControlLibrary1">

<ControlTemplate x:Key="myControlTemplate1">
    <TextBlock Text="This text should appear"></TextBlock>
</ControlTemplate>
<Style TargetType="{x:Type local:CustomControl1}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:CustomControl1}">
                <Border Background="{TemplateBinding Background}"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}">

                    <ContentControl Template="{DynamicResource myControlTemplate1}"></ContentControl>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

当我在应用程序中使用我的控件时,我看不到TextBlock。为什么?

但如果我将其更改为使用StaticResource 的模板,它就可以工作。为什么?

【问题讨论】:

标签: wpf wpf-controls


【解决方案1】:

我认为答案在here(下文最后一句):

静态资源查找可以扩展到主题或系统资源,但这仅因为 XAML 加载程序延迟请求而受支持。延迟是必要的,以便页面加载时的运行时主题正确地应用于应用程序。但是,不推荐对已知仅存在于主题中或作为系统资源的键的静态资源引用。这是因为如果用户实时更改主题,则不会重新评估此类引用。当您请求主题或系统资源时,动态资源引用更可靠。例外情况是主题元素本身请求另一个资源。由于前面提到的原因,这些引用应该是静态资源引用。

您可以在您的应用资源中合并 Generic.xaml,然后资源查找不会扩展到主题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-16
    • 2022-01-12
    • 1970-01-01
    相关资源
    最近更新 更多