将Caliburn.Micro与Mahapps MetroTabItem结合使用不会将视图加载到ContentControl

时间:2018-11-08 16:20:33

标签: c# .net wpf caliburn.micro mahapps.metro

我刚刚开始学习使用WPF以及Caliburn.Micro(v3.2.0)和Mahapps(v2.0.0 a0105),并且在尝试获取Mahapps MetroTabItem以在ContentControl框中显示视图时遇到了问题。 ContentControl最初位于单独的网格中,但是据我所知,这应该很好。为了进行测试,我将其移至下面:(请注意,我同时将“ Name”设置为Name =和x:Name =,但这似乎没有什么不同。)

<!-- This is in AppView.xaml -->
<Grid.Resources>
    <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.AnimatedTabControl.xaml" />
</Grid.Resources>
<TabControl Height="150"
                    Controls:TabControlHelper.Underlined="SelectedTabItem"
                    TabStripPlacement="Left" Grid.Column="0" Grid.Row="0">
<Controls:MetroTabItem Header="EndPoints" Name="MenuEndPoint">
<ContentControl x:Name="ActiveItem" />
</Controls:MetroTabItem>

尽管如此,这还是没有用。如果我仅用TextBlock替换ContentControl,那很好,因此,我认为选项卡设置不是问题,除非我没有正确的设置。实际的EndpointView.xaml并没有太多额外的内容,只是我在其中放了一个TextBlock,以便在加载时可以看到它。

我的AppViewModel包含:

public class AppViewModel : Conductor<object>
{

    public void MenuEndPoint()
    {
        ActivateItem(new EndpointViewModel());
    } 

我的EndpointViewModel包含:

public class EndpointViewModel : Screen
{

}

我将使用myapp.Views的命名空间放入所有ViewModels中,然后才将myapp.ViewModels放入ViewModels中进行测试,以确保不是那样,但也没有变化。

我观看了Tim Corey的https://www.youtube.com/watch?v=laPFq3Fhs8k,并试图在GitHub上找到其他一些以类似方式使用它的项目,但是我发现使用它的方式并没有什么不同。有人有建议吗?

谢谢, -MH

1 个答案:

答案 0 :(得分:1)

要使其生效,首先需要将一个事件附加到您的方法上。 由于您希望单击鼠标,所以相信您可以使用PreviewMouseDown。 为此,您的MetroTabItem必须看起来像这样:

 <Controls:MetroTabItem Header="EndPoints" Name="MenuEndPoint" cal:Message.Attach="[Event PreviewMouseDown]=[Action MenuEndPoints]" >

然后将您的方法重命名为复数形式:

public void MenuEndPoints()
    {
        ActivateItem(new EndpointViewModel());
    }