我正在尝试使用代码后台来支持DataTemplate中的事件处理程序。以下代码在作为窗口的代码后台时运行良好,但在作为ResourceDictionary的代码后台时无法编译。我知道使用Commands是更好的选择,但这主要是为了测试资源字典中资源的事件处理,以便更好地组织我的代码。我的目标是更好地组织我的代码,但这并不是我认为分离的ResourceDictionary文件应该提供的简单的“包含”行为。
在MainWindow.xaml中:
在MainWindow.xaml.cs和MainWindowResources.xaml.cs的代码后台中,相同的代码:
this.FindResource()不是一个有效的方法,且"ContentTemplateProperty"未找到:
错误4 'ContentTemplateProperty'在当前上下文中不存在 C:...\Visual Studio 2010\Projects\Wizbang\Wizbang\Resources\MainWindowResources.xaml.cs 36 26 Wizbang
错误5 'Wizbang.Resources.MainWindowResources'不包含定义为'FindResource'的内容,也没有接受类型为'Wizbang.Resources.MainWindowResources'的第一个参数的扩展方法'FindResource' (是否缺少使用指令或程序集引用?) C:...\Visual Studio 2010\Projects\Wizbang\Wizbang\Resources\MainWindowResources.xaml.cs 36 56 Wizbang
如果我删除最后一行,则代码编译和运行,但按钮没有功能。 我认为我的问题是从ResourceDictionary的角度映射最后一行的引用,但我不确定为什么它应该有所不同。
感谢您的任何想法。
比尔
在MainWindow.xaml中:
<Window x:Class="Wizbang.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:my="clr-namespace:DevComponents.WpfEditors;assembly=DevComponents.WpfEditors"
xmlns:diag="clr-namespace:System.Diagnostics;assembly=WindowsBase"
xmlns:local ="clr-namespace:Wizbang"
xmlns:m ="clr-namespace:Wizbang.Model"
xmlns:vm="clr-namespace:Wizbang.ViewModel"
xmlns:vw="clr-namespace:Wizbang.View"
DataContext="{Binding Path=Main, Source={StaticResource Locator}}"
Title="Wizbang" Height="760" Width="1335" WindowStartupLocation="CenterScreen">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary Source="Resources/MainWindowResources.xaml" />
</ResourceDictionary>
</Window.Resources>
在MainWindow.xaml.cs和MainWindowResources.xaml.cs的代码后台中,相同的代码:
private void btnSave_Click(object sender, RoutedEventArgs e)
{
//switch item template
Button btn = (Button)sender;
//command contains the list item
ContentControl itm = (ContentControl)btn.CommandParameter;
itm.SetValue(ContentTemplateProperty, this.FindResource("DetailedTemplate") as DataTemplate);
//this.UpdateLayout();
}
当我将ResourceDictionary内联到MainWindow.xaml中,并将代码放在MainWindow.xaml.cs中时,一切正常。但是,当我尝试使用单独的文件作为ResourceDictionary时,代码无法编译。编译器抱怨最后一行:
itm.SetValue(ContentTemplateProperty, this.FindResource("DetailedTemplate") as DataTemplate);
this.FindResource()不是一个有效的方法,且"ContentTemplateProperty"未找到:
错误4 'ContentTemplateProperty'在当前上下文中不存在 C:...\Visual Studio 2010\Projects\Wizbang\Wizbang\Resources\MainWindowResources.xaml.cs 36 26 Wizbang
错误5 'Wizbang.Resources.MainWindowResources'不包含定义为'FindResource'的内容,也没有接受类型为'Wizbang.Resources.MainWindowResources'的第一个参数的扩展方法'FindResource' (是否缺少使用指令或程序集引用?) C:...\Visual Studio 2010\Projects\Wizbang\Wizbang\Resources\MainWindowResources.xaml.cs 36 56 Wizbang
如果我删除最后一行,则代码编译和运行,但按钮没有功能。 我认为我的问题是从ResourceDictionary的角度映射最后一行的引用,但我不确定为什么它应该有所不同。
感谢您的任何想法。
比尔