【问题标题】:Mahapps flyout not appearing with and caliburn.microMahapps 弹出窗口未与 caliburn.micro 一起出现
【发布时间】:2014-03-18 22:13:09
【问题描述】:

我正在尝试使用 mahapps 和 caliburn.micro 在 wpf 中显示一个浮出控件,不幸的是浮出控件的视图没有被解析,我得到的只是浮出控件中显示的视图模型的类型名称。

我需要在 shell 中显示基于 ActiveItem 的浮出控件,例如公司搜索浮出控件与联系人搜索浮出控件不同。

有什么想法可以让我完成这项工作。

public void ShowSearchFlyout()
{
    var supportsSearch = ActiveItem as ISupportSearch;
    if (supportsSearch != null)
    {
        if (!Flyouts.Contains(supportsSearch.SearchFlyout))
        {
            Flyouts.Add(supportsSearch.SearchFlyout);
        }
        supportsSearch.SearchFlyout.IsOpen = true;
    }
}
<controls:MetroWindow.Flyouts>
    <controls:FlyoutsControl ItemsSource="{Binding Flyouts}">
        <controls:FlyoutsControl.ItemContainerStyle>
            <Style BasedOn="{StaticResource {x:Type controls:Flyout}}" TargetType="{x:Type controls:Flyout}">
                <Setter Property="Header" Value="{Binding Header}"  />
                <Setter Property="IsOpen" Value="{Binding IsOpen}" />
                <Setter Property="Position" Value="{Binding Position}" />
            </Style>
        </controls:FlyoutsControl.ItemContainerStyle>
    </controls:FlyoutsControl>
</controls:MetroWindow.Flyouts>

【问题讨论】:

    标签: wpf caliburn.micro mahapps.metro


    【解决方案1】:

    以下内容对我有用:

    <controls:MetroWindow.Flyouts>
      <controls:FlyoutsControl ItemsSource="{Binding Flyouts}">
        <controls:FlyoutsControl.ItemTemplate>
          <DataTemplate>
            <ContentControl cal:View.Model="{Binding}" />
          </DataTemplate>
        </controls:FlyoutsControl.ItemTemplate>
        <controls:FlyoutsControl.ItemContainerStyle>
          <Style BasedOn="{StaticResource {x:Type controls:Flyout}}" TargetType="{x:Type controls:Flyout}">
            <Setter Property="Header" Value="{Binding Header}"  />
            <Setter Property="IsOpen" Value="{Binding IsOpen}" />
            <Setter Property="Position" Value="{Binding Position}" />
          </Style>
        </controls:FlyoutsControl.ItemContainerStyle>
      </controls:FlyoutsControl>
    </controls:MetroWindow.Flyouts>
    

    为了使绑定正确,您必须添加:

        <controls:FlyoutsControl.ItemTemplate>
          <DataTemplate>
            <ContentControl cal:View.Model="{Binding}" />
          </DataTemplate>
        </controls:FlyoutsControl.ItemTemplate>
    

    如果不这样做,您将在 FlyOut 中获得函数 ToString() 的结果。默认是类的类型名称(视图模型)。尝试覆盖它。

    我希望我可以很好地解释为什么需要上述绑定,但我对 WPF/Caliburn/MVVM 还很陌生。也许其他人可以详细说明。不过,我认为这可能会帮助您继续前进。

    【讨论】:

    • 仍然有效,太糟糕了 MahApp 自己的示例将您引向错误的方向
    猜你喜欢
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多