gpt4 book ai didi

wpf - 具有DataTemplate的Window.Content

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

我有一个DataTemplate,如果我做类似的事情,它的DataType是MyViewModel:

<ContentPresenter Content="{Binding SomeViewModel}"/>

如果将“SomeViewModel”设置为MyViewModel(在DataTemplate中定义的VM),则可以在 View 上看到DataTemplate渲染,这是预期的。

我想做的是这样的:
Window host = new Window()
host.Content = new MyViewModel();
host.Show();

我希望这会显示一个带有与MyViewModel渲染相关联的DataTemplate的窗口,而不是一个带有单行的窗口,即我的ViewModel的路径。

我究竟做错了什么 ?

最佳答案

可能是资源位置问题。以前在哪里定义了DataTemplate?它在App.xaml的ResourceDictionary中吗?尝试在其中添加DataTemplate

<Application ...>
<Application.Resources>
<DataTemplate DataType="{x:Type MyViewModel}">
<!-- View -->
</DataTemplate>
</Application.Resources>
</Application>

在更好的情况下,您可以将其放置在 ResourceDictionary中,并将其与 App.xaml中的其他人合并。

编辑:很小的工作示例。
<Application x:Class="DataTemplateTest.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Startup="Application_Startup">
<Application.Resources>
<DataTemplate DataType="{x:Type sys:Int32}">
<Border Background="Red">
<TextBlock Text="{Binding}" />
</Border>
</DataTemplate>
</Application.Resources>
</Application>

适当的代码隐藏:
public partial class App : Application
{
private void Application_Startup(object sender, StartupEventArgs e)
{
var window = new Window();
window.Content = 42;
window.Show();
}
}

编辑2:由于您说过此代码在WPF加载项
  • 如果DataTemplate在主机应用程序中,则将无法使用。主机和加载项UI不会以这种方式互相交谈,因为加载项仅仅是HwndSource
  • 如果DataTemplate在AddIn的ResourceDictionary中,则可以这样加载它:
    var window = new Window();
    window.Resources.MergedDictionaries.Add(
    new ResourceDictionary
    {
    Source =
    new Uri("pack://application:,,,/AddInAssembly;component/Resources.xaml",
    UriKind.Relative)
    });
    window.Content = ...;
    window.Show();
  • 关于wpf - 具有DataTemplate的Window.Content,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5382821/

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