gpt4 book ai didi

wpf - ResourceDictionary 中 DataTemplate 的代码隐藏

转载 作者:行者123 更新时间:2023-12-03 18:27:18 25 4
gpt4 key购买 nike

我正在尝试使用代码隐藏来支持 DataTemplate 中的事件处理程序。下面的代码在 Window 的代码隐藏时工作正常,但不适用于 ResourceDictionary。将代码放在 ResourceDictionary 的代码隐藏中时甚至不会编译。

我知道 Commands 在这里是更好的选择,但这主要是为了确保我可以在需要时处理 ResourceDictionary 中的资源事件。我的目标是更好地组织我的代码,但这并不是我认为单独的 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();

}

当我在 MainWindow.xaml 中保持 ResourceDictionary 内联,并将代码隐藏在 MainWindow.xaml.cs 中时,一切正常。当我尝试为 ResourceDictionary 使用单独的文件时,代码无法编译。编译器提示最后一行:
itm.SetValue(ContentTemplateProperty, this.FindResource("DetailedTemplate") as DataTemplate);

this.FindResource() 不是有效方法,并且未找到“ContentTemplateProperty”:

Error 4 The name 'ContentTemplateProperty' does not exist in the current context C:...\Visual Studio 2010\Projects\Wizbang\Wizbang\Resources\MainWindowResources.xaml.cs 36 26 Wizbang

Error 5 'Wizbang.Resources.MainWindowResources' does not contain a definition for 'FindResource' and no extension method 'FindResource' accepting a first argument of type 'Wizbang.Resources.MainWindowResources' could be found (are you missing a using directive or an assembly reference?) C:...\Visual Studio 2010\Projects\Wizbang\Wizbang\Resources\MainWindowResources.xaml.cs 36 56 Wizbang



如果我删除最后一行,代码会编译并运行,但按钮没有功能。我认为我的问题是从 ResourceDictionary 的角度映射最后一行的引用,但我不确定为什么它应该不同。

感谢您的任何想法。

账单

最佳答案

我认为使用命令会是一种更简洁的方法。

关于wpf - ResourceDictionary 中 DataTemplate 的代码隐藏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5630345/

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