【问题标题】:Missing Resources when calling for a Enum Value of a different assembly via Xaml通过 Xaml 调用不同程序集的枚举值时缺少资源
【发布时间】:2012-07-03 06:40:12
【问题描述】:

我有两个程序集
1.MyProj.GUI 2. 我的项目

MyProj 中我定义了一个enum MergeAction {ApplyTarget, ApplyToWorkingCopy, Ignore};
MyProj.GUI 中,我有一个用于组合框的 Xaml:

xmlns:Merge="clr-namespace:Megatec.EB2UDF.Merge;assembly=Megatec.EB2UDF"

<DataTemplate DataType="{x:Type Merge:DifferenceViewModel}">
  <ComboBox SelectedValue="{Binding Path=MergeAction}">
    <ComboBox.Items>
      <Merge:MergeAction>Ignore</Merge:MergeAction>
      <Merge:MergeAction>ApplyToWorkingCopy</Merge:MergeAction>
      <Merge:MergeAction>ApplyToTarget</Merge:MergeAction>
    </ComboBox.Items>
  </ComboBox>
</DataTemplate>

当我打开窗口时,我得到了异常System.Resources.MissingManifestResourceException
找不到任何适合指定文化或中性文化的资源...

没有ComboBox.Items 标签...一切都很酷...

这是为什么呢?
我究竟做错了什么?

编辑:

从 Xaml 多次调用程序集(即使是同一个对象)
示例

 <ribbon:Button Label="Send Change"  CommandParameter="{x:Static Merge:MergeAction.ApplyToTarget}" Command="{Binding ApplyActionCommand}">
     <ribbon:Button.ImageSourceLarge>
        <BitmapImage UriSource="/Images/MAIL.png" />
     </ribbon:Button.ImageSourceLarge>
 </ribbon:Button>

只有组合框会出错。

【问题讨论】:

  • 它是您使用另一个程序集的唯一地方吗?似乎问题不在 Xaml 中,它是在加载另一个程序集时发生的。
  • @dvvrd 不,我经常使用它,ViewModel 在这个Merge 程序集中。编辑了帖子
  • 您可能正在尝试本地化 MergeAction 枚举的显示名称或类似这样的东西?看到你的一些虚拟机代码真的很有趣

标签: wpf xaml exception resources enums


【解决方案1】:

好吧,找到解决方案了:

我很喜欢 WPF,所以我不知道它起作用的原因,但它确实起作用了!

我在ComboBox 中添加了一个ItemTemplate,如下所示:

<ComboBox SelectedValue="{Binding Path=MergeAction}">
  <ComboBox.Items>
    <Merge:MergeAction>Ignore</Merge:MergeAction>
    <Merge:MergeAction>ApplyToWorkingCopy</Merge:MergeAction>
    <Merge:MergeAction>ApplyToTarget</Merge:MergeAction>
  </ComboBox.Items>
  <ComboBox.ItemTemplate>
    <DataTemplate>
      <TextBlock Text="{Binding}"></TextBlock>
    </DataTemplate>
  </ComboBox.ItemTemplate>
</ComboBox>

现在一切都很酷..

但是,...我不明白为什么?

【讨论】:

  • 嘿,真的很酷:) 如果将 TextBlock 标签更改为 一个,是否会引发此异常?
  • 是的,ContentPresenter 确实会再次发生这种情况,有什么区别?为什么呢?它搜索了哪些资源?
  • 我不能确切地知道它,但也许当你试图将一些枚举值传递给 ContentPresenter 时,WPF 魔法不仅为此调用 ToString(),而是想要进行可能的本地化并请求资源与当前的文化。您的问题是known。我建议您使用ObjectDataProvider 而不是您的解决方案,它使向枚举添加值更简单且不那么欺骗:)
  • 我也尝试过 ObjectDataProvider,认为这是问题所在,所以我简化了情况:) 如果没有模板,它也会失败。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-07
  • 2017-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多