gpt4 book ai didi

wpf - float 窗口后AvalonDock文档 View 内容消失

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

我在我的项目中使用AvalonDock控件。当我将文档移动到任何地方并脱离控制时,文档内容就会消失。如果我将文档重新放置到控件中,文档内容就会出来。我确定我错过了这么简单的东西,但我不明白问题所在。这是MainView的代码片段;

            <xcad:DockingManager AllowMixedOrientation="True" DocumentsSource="{Binding DocumentViewModels}">
<xcad:DockingManager.Resources>
<DataTemplate DataType="{x:Type viewModels:WatchListViewModel}">
<local:WatchListView DataContext="{Binding}"/>
</DataTemplate>
<DataTemplate DataType="{x:Type viewModels:ScanListViewModel}">
<local:ScanListView DataContext="{Binding}"/>
</DataTemplate>
<DataTemplate DataType="{x:Type viewModels:SignalListViewModel}">
<local:SignalListView DataContext="{Binding}"/>
</DataTemplate>
</xcad:DockingManager.Resources>
<xcad:DockingManager.LayoutItemContainerStyle>
<Style TargetType="{x:Type xcad:LayoutItem}">
<Setter Property="Title" Value="{Binding Model.Document.Title}"/>
</Style>
</xcad:DockingManager.LayoutItemContainerStyle>
</xcad:DockingManager>

为了澄清问题,希望共享三个屏幕截图。第一个屏幕截图显示的是移动到任何位置之前的文档。第二张屏幕截图显示了移至任何位置( float )后的文档。第三个屏幕截图显示了重新停靠在同一位置。实际上第一张和第三张图片相同,但我想清楚地表明实际内容仍然存在。

BEFOE DETACH

AFTER DETACH

AFTER RE-DOCK

最佳答案

您需要在代码中添加DataTemplateSelector,以教AvalonDock哪个DataTemplate用于您自己的View/ViewModel。

为此,您需要定义一个新的类,如下所示:

class PanesTemplateSelector : System.Windows.Controls.DataTemplateSelector
{
public DataTemplate WatchListViewTemplate { get; set; }
public DataTemplate ScanListViewTemplate { get; set; }
public DataTemplate SignalListViewTemplate { get; set; }

public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
if (item is WatchListViewModel)
return WatchListViewTemplate;

if (item is ScanListViewModel)
return ScanListViewTemplate;

if (item is SignalListViewModel)
return SignalListViewTemplate;

return base.SelectTemplate(item, container);
}
}

然后,您需要按照以下步骤向您的XAML添加此类:
<xcad:DockingManager.LayoutItemTemplateSelector>
<s:PanesTemplateSelector>
<s:PanesTemplateSelector.WatchListViewTemplate>
<DataTemplate>
<p:WatchListView />
</DataTemplate>
</s:PanesTemplateSelector.WatchListViewTemplate>
<s:PanesTemplateSelector.ScanListViewTemplate>

<DataTemplate>

<p:ScanListView />

</DataTemplate>

</s:PanesTemplateSelector.ScanListViewTemplate>

<s:PanesTemplateSelector.SignalListViewTemplate>

<DataTemplate>

<p:SignalListView />

</DataTemplate>

</s:PanesTemplateSelector.SignalListViewTemplate>
</s:PanesTemplateSelector>
</xcad:DockingManager.LayoutItemTemplateSelector>
s链接到您在其中定义 PanesTemplateSelector的 namespace ,而 p链接到您在其中定义自己的 View 的 namespace

关于wpf - float 窗口后AvalonDock文档 View 内容消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62259676/

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