Generic.xaml 中的 WPF StaticResourceExtension 找不到名为“x”的资源

问题描述 投票:0回答:1

Handycontrols WPF库提供了一个名为NumericUpDown的控件,它是一个数字字段,带有一个用于增加和减少值的按钮。

我正在制作一个派生自该控件的控件,称为TuggableUpDown。我希望用户能够单击并拖动箭头来上下滚动值,类似于 Unity 3D 等软件。

我创建了派生类:

public class TuggableUpDown : NumericUpDown
{
    
}

现在我想给这个班做一个style。因为该样式完成了 NumericUpDown 样式应做的所有事情,所以我想以该样式为基础。因为我希望这种样式成为默认样式,所以我在 Generic.xaml 中定义了它。

<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:hc="https://handyorg.github.io/handycontrol"
xmlns:local="clr-namespace:MyLibrary"
xmlns:hx="clr-namespace:MyLibrary.HandyExtensions"
xmlns:interactivity="clr-namespace:HandyControl.Interactivity;assembly=HandyControl">

<Style TargetType="{x:Type local:TuggableUpDown}" BasedOn="{hc:StaticResource NumericUpDownBaseStyle}">
    <Setter Property="Background" Value="Blue"/>
</Style>

但这会在我加载控件时引发错误。

System.Windows.Markup.XamlParseException:“在‘HandyControl.Themes.StaticResourceExtension’上提供值引发了异常。”行号“10”和行位置“52”。 内部异常 异常:找不到名为“NumericUpDownBaseStyle”的资源。资源名称区分大小写。

我在同一个资源字典的其他地方使用 hc: 命名空间(尽管不是作为“BasedOn”参数)。 NumericUpDownBaseStyle 确实是我尝试使用的样式的关键,甚至由自动完成显示。为什么解决不了?

c# wpf resourcedictionary wpf-style basedon
1个回答
0
投票

解决方法好像是把Handycontrols的theme dictionary合并到我的generic.xaml dictionary中

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="/HandyControl;component/Themes/Theme.xaml"/>
</ResourceDictionary.MergedDictionaries>

<Style TargetType="{x:Type local:TuggableUpDown}" BasedOn="{hc:StaticResource NumericUpDownBaseStyle}">
    <Setter Property="Background" Value="Blue"/>
</Style>

我仍然不知道为什么需要这样做,尤其是当我在另一个模板中引用此控件正下方的 hc: 命名空间时,到目前为止它还没有引起问题。这也不是我认为命名空间的工作方式:为什么我需要将内容合并到字典中以及在 xaml 中导入命名空间?我在网上找不到任何可以解释这种奇怪行为的东西。

© www.soinside.com 2019 - 2024. All rights reserved.