这是关于一起使用Avalon Dock和Caliburn.Micro的新手问题。首先,我从Mindscape博客的excellent tutorial on Caliburn Micro获得了一个Caliburn.Micro工作的简单示例。这个例子由一个主窗口称为MainShellView的:Caliburn.Micro示例与AvalonDock不起作用
<UserControl x:Class="TestApp.MainShellView"
d:DesignHeight="300" d:DesignWidth="300">
<Grid Width="300" Height="300" Background="LightBlue">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<ContentControl Name="ColorModel" Margin="10"/>
<Rectangle Width="100" Height="100" Fill="{Binding Color}" Grid.Column="1"/>
</Grid>
</UserControl>
其中ColorView由三个单选按钮:
<UserControl x:Class="TestApp.ColorView">
<Grid>
<RadioButton Name="Red" Content="Red" Foreground="White"
VerticalAlignment="Center" HorizontalAlignment="Center" />
<RadioButton Name="Green" Content="Green" Foreground="White"
VerticalAlignment="Center" HorizontalAlignment="Center" Grid.Row="1" />
<RadioButton Name="Blue" Content="Blue" Foreground="White"
VerticalAlignment="Center" HorizontalAlignment="Center" Grid.Row="2" />
</Grid>
</UserControl>
背后MainShellView类有一个颜色属性:
public class MainShellViewModel : PropertyChangedBase, IHandle<ColorEvent>
{
public SolidColorBrush Color
{
get { ... }
set { ... }
}
}
和Caliburn.Micro将MainShellView中右侧矩形的颜色设置为单选按钮所选颜色:
[Export(typeof(ColorViewModel))]
public class ColorViewModel
{
public void Red()
{
_events.PublishOnUIThread(new ColorEvent(new SolidColorBrush(Colors.Red)));
}
public void Green() { /* something similar */ }
public void Blue() { /* something similar */ }
}
我又试图一个文档和其他文档的彩色矩形由AvalonDock布局取代了电网在MainShellView,与ColorView:
<UserControl x:Class="TestApp.MainShellView"
xmlns:local="clr-namespace:TestApp"
d:DesignHeight="300" d:DesignWidth="300">
<avalon:DockingManager>
<avalon:LayoutRoot>
<avalon:LayoutPanel>
<avalon:LayoutDocumentPane>
<avalon:LayoutDocument Title="Document 1">
<ContentControl Name="ColorModel"/>
</avalon:LayoutDocument>
</avalon:LayoutDocumentPane>
<avalon:LayoutDocumentPane>
<avalon:LayoutDocument Title="Document 2">
<Rectangle Width="100" Height="100" Fill="{Binding Color}" Grid.Column="1"/>
</avalon:LayoutDocument>
</avalon:LayoutDocumentPane>
</avalon:LayoutPanel>
</avalon:LayoutRoot>
</avalon:DockingManager>
</UserControl>
然而ColorView并不左侧出现手边。 Caliburn绑定也失败 - 单步执行Caliburn源代码,这是因为VisualTreeHelper无法看到ColorView。
我缩写的源代码之上,并把完整的源代码中https://github.com/BobMortimer/SO_Question1。
我当然在做一些愚蠢的事情。那么为什么这不起作用,我该如何解决?
我将不得不阅读关于IoC的一些信息,以了解这会带给我什么 – 2015-02-26 13:55:17