0
我試圖將AvalonDock 2.8與Caliburn Micro 2.0.2一起使用。以下是我目前有:與Caliburn Micro一起使用AvalonDock
MainView.xaml:
<Window x:Class="MainView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:cal="http://www.caliburnproject.org"
xmlns:xcad="http://schemas.xceed.com/wpf/xaml/avalondock"
xmlns:local="clr-namespace:CaliburnMicroAndAvalonDock"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="40"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Button x:Name="Open" Content="Open new document" Margin="5"/>
<xcad:DockingManager Grid.Row="1" DocumentsSource="{Binding Items}">
<xcad:DockingManager.LayoutItemContainerStyle>
<Style TargetType="{x:Type xcad:LayoutItem}">
<Setter Property="Title" Value="{Binding Model.DisplayName}" />
</Style>
</xcad:DockingManager.LayoutItemContainerStyle>
<xcad:DockingManager.LayoutItemTemplateSelector>
<local:LayoutItemTemplateSelector>
<local:LayoutItemTemplateSelector.Template>
<DataTemplate>
<ContentControl cal:View.Model="{Binding .}" IsTabStop="False"/>
</DataTemplate>
</local:LayoutItemTemplateSelector.Template>
</local:LayoutItemTemplateSelector>
</xcad:DockingManager.LayoutItemTemplateSelector>
<xcad:LayoutRoot>
<xcad:LayoutPanel Orientation="Horizontal">
<xcad:LayoutDocumentPane/>
</xcad:LayoutPanel>
</xcad:LayoutRoot>
</xcad:DockingManager>
</Grid>
</Window>
MainViewModel.vb:
Imports Caliburn.Micro
Public Class MainViewModel
Inherits Conductor(Of Screen).Collection.OneActive
Private m_Index As Int32 = 0
Sub Open()
ActivateItem(New DocumentViewModel With {.DisplayName = $"Document {m_Index}"})
m_Index += 1
End Sub
End Class
Document.xaml:
<UserControl x:Class="DocumentView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:CaliburnMicroAndAvalonDock"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<TextBlock Text="{Binding DisplayName}"/>
</Grid>
</UserControl>
DocumentViewModel.vb:
Imports Caliburn.Micro
Public Class DocumentViewModel
Inherits Screen
End Class
個
LayoutItemTemplateSelector.vb:
Public Class LayoutItemTemplateSelector
Inherits DataTemplateSelector
Public Property Template As DataTemplate
Public Overrides Function SelectTemplate(item As Object, container As DependencyObject) As DataTemplate
Return Me.Template
End Function
End Class
部分它的工作原理,問題是,鑑於失敗Cannot find view for System.Windows.Controls.ContentPresenter
錯誤加載:
我很新的這兩個卡利Micro和AvalonDock,所以我的代碼很大程度上基於我在網上找到的例子(例如this)。但這些樣本相當陳舊,並且不適用於當前版本的AvalonDock(2.8.15465.16500)。如果我切換到較舊的(2.0.2000),它工作正常。