我试图运行this example,但我遇到了绑定问题。
Designer会突出显示错误The resource "monthCollection" could not be resolved
如何将Utility.MonthCollection用作本地资源?
XAML部分:
<Window x:Class="FaceReport.WindowMain"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Rapor" Height="402" Width="600" WindowState="Normal">
<Grid Name="gridMain" x:Uid="uidGridMain">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<ComboBox SelectedIndex="0"
DisplayMemberPath="Value" SelectedValuePath="Key" Margin="132,9,200,0"
Grid.Row="3" Height="24" VerticalAlignment="Top" Name="cbBind"
ItemsSource="{Binding Source={StaticResource Utility.ReportForCollection},
Path=Utility.ReportForCollection}"
/>
</Grid>
</Window>
C#部分:
namespace FaceReport
{
internal class Utility
{
public enum ReportFor
{
Choose,
All,
Group,
Person
}
private static Dictionary<ReportFor, string> _dictReportFor;
public static Dictionary<ReportFor, string> ReportForCollection
{
get
{
return _dictReportFor;
}
}
static Utility()
{
//initialize the collection with user friendly strings for each enum
_dictReportFor = new Dictionary<ReportFor, string>(){
{ReportFor.Choose, "Lütfen seçiniz..."},
{ReportFor.All, "Herkes"},
{ReportFor.Group, "Grup"},
{ReportFor.Person, "Şahıs"}};
}
}
/// <summary>
/// Application's main form
/// </summary>
public partial class WindowMain : Window
{
/// <summary>
/// Constructor
/// </summary>
public WindowMain()
{
InitializeComponent();
}
}
答案 0 :(得分:13)
你错过了这一点:
- &gt;此Utility类可以实例化为资源&lt; - 然后 在ComboBox创建中引用。
它看起来像这样:
<Application.Resources>
<local:Utility x:Key="monthCollection"/>
</Application.Resources>
这一位:{Binding Source={StaticResource monthCollection}, Path=MonthCollection
说找到静态资源monthCollection
并在其上使用属性MonthCollection
所以你首先必须实例化`MonthCollection作为属性然后引用该静态资源的对象。
您可能还需要在文件顶部添加类似这样的声明:
xmlns:local="clr-namespace:YourNamespaceHere"
以下未经测试的代码:
<Window x:Class="FaceReport.WindowMain"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:FaceReport"
Title="Rapor" Height="402" Width="600" WindowState="Normal">
<Application.Resources>
<local:Utility x:Key="reportCollection"/>
</Application.Resources>
<Grid Name="gridMain" x:Uid="uidGridMain">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<ComboBox SelectedIndex="0" DisplayMemberPath="Value" SelectedValuePath="Key" Margin="132,9,200,0" Grid.Row="3" Height="24" VerticalAlignment="Top" Name="cbBind"
ItemsSource="{Binding Source={StaticResource reportCollection}, Path=ReportForCollection}" />
</Grid>
</Window>
答案 1 :(得分:1)
请在app.xaml中添加如下条目:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Skins/ControlSkin.xaml">
</ResourceDictionary>
<ResourceDictionary Source="/Skins/ListBox.xaml">
</ResourceDictionary>
</ResourceDictionary.MergedDicionaries>
</ResourceDictionary>
</Application.Resources>