gpt4 book ai didi

c# - 尝试使用标记扩展时出错

转载 作者:太空宇宙 更新时间:2023-11-03 13:34:06 24 4
gpt4 key购买 nike

我有一个小窗口,我试图在我的应用程序启动时加载它。这是(松散的)XAML:

<ctrl:MainWindow
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ctrl="clr-namespace:Controls;assembly=Controls">
<Grid>
<ctrl:ConnectionStatusIndicator/>
<TextBlock Grid.Row="2" Text="{Resx ResxName=MyApp.MainDialog, Key=MyLabel}"/>
</Grid>
</ctrl:MainWindow>

注意名为 ConnectionStatusIndicator 的自定义控件。它的代码是:

using System.Windows;
using System.Windows.Controls;

namespace Controls
{
public class ConnectionStatusIndicator : Control
{
public ConnectionStatusIndicator()
{
}

static ConnectionStatusIndicator()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(ConnectionStatusIndicator),
new FrameworkPropertyMetadata(typeof(ConnectionStatusIndicator)));
IsConnectedProperty = DependencyProperty.Register("IsConnected", typeof(bool), typeof(ConnectionStatusIndicator), new FrameworkPropertyMetadata(false));
}

public bool IsConnected
{
set { SetValue(IsConnectedProperty, value); }
get { return (bool)GetValue(IsConnectedProperty); }
}

private static DependencyProperty IsConnectedProperty;
}
}

现在,这就是它变得奇怪的地方(至少对我而言)。使用上面显示的 XAML,我的应用程序将构建并运行得很好。但是,如果我删除以下行:

<ctrl:ConnectionStatusIndicator/>

或事件将其向下移动一行,我收到以下错误:

Additional information: 'Cannot create unknown type '{http://schemas.microsoft.com/winfx/2006/xaml/presentation}Resx'.' Line number '13' and line position '33'.

对我来说真正奇怪的是,如果我将 ConnectionStatusIndicator 替换为同一程序集中的另一个自定义控件,我会收到错误消息。另一个自定义控件非常相似,但属性更多。

谁能解释一下这是怎么回事?

最佳答案

Resx标记扩展属于 Infralution.Localization.Wpf命名空间,但也做了一些有点骇人听闻的事情,并试图将自己注册到 http://schemas.microsoft.com/winfx/2006/xaml/presentation xml 命名空间,以允许开发人员将其用作 {Resx ...}而不是必须在 XAML 中声明命名空间并使用带有前缀 {resxNs:Resx ...} 的扩展名.

我相信如果您清理您的解决方案并可能删除您的 *.sou 文件,该项目将按预期构建,但解决此问题的可靠方法是添加 xmlns Infralution.Localization.Wpf的声明并使用带有 xmlns 前缀的扩展名:

<ctrl:MainWindow
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ctrl="clr-namespace:Controls;assembly=Controls"
xmlns:loc="clr-namespace:Infralution.Localization.Wpf;assembly=Infralution.Localization.Wpf">
<Grid>
<ctrl:ConnectionStatusIndicator/>
<TextBlock Grid.Row="2" Text="{loc:Resx ResxName=MyApp.MainDialog, Key=MyLabel}"/>
</Grid>
</ctrl:MainWindow>

此外,对于任何感兴趣的人,“hack”都在本地化库中的这些行中:

[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "Infralution.Localization.Wpf")]
[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2007/xaml/presentation", "Infralution.Localization.Wpf")]
[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2008/xaml/presentation", "Infralution.Localization.Wpf")]

关于c# - 尝试使用标记扩展时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19304016/

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