自定义 WindowChrome [ Wpf Core 3.1; MvvmCross 7.0.0]

Custom WindowChrome [ Wpf Core 3.1; MvvmCross 7.0.0 ]

如何在使用 MvvmCross 时自定义 WindowChrome class?

我知道了:

<WindowChrome.WindowChrome>
        <WindowChrome CaptionHeight="{x:Static SystemParameters.CaptionHeight}" ResizeBorderThickness="{x:Static SystemParameters.WindowResizeBorderThickness}" />
</WindowChrome.WindowChrome>
    
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <TextBlock
        Grid.Row="0"
        Grid.Column="0"
        FontSize="32"
        Text="SOME UPPER CASE TEXT THAT WILL NEVER BE DISPLAYED" />
</Grid>

在我的 MvxWindow 中,WindowStyle 设置为 none
问题是 MvxWindow 似乎没有显示任何内容。这意味着我也无法创建我需要的按钮。我不知道 MvvmCross 是否期望每个 UI 元素都成为 View 的一部分,或者还有什么事情发生了。调整大小甚至右键单击不可见边框都可以正常工作。有什么方法可以做到这一点而不必在 View 中重建整个 WindowChrome 功能?

我会自己回答这个问题;
虽然使用 MvvmCross 创建自定义 WindowChrome 几乎没有区别,但我会继续提出这个问题,希望它能帮助其他人。

无法在 MvxWindow 中显示 UI 个元素实际上完全没有问题。只需在您的 View 中创建 UI 并将 WindowChrome.IsHitTestVisibleInChrome 属性 设置为 true 为您需要的每个元素。
WindowView 中执行此操作基本上没有区别。您只需要留意您的 CaptionHeight,因为您的 WindowChrome 和 UI 现在在两个不同的脚本中。
它可能看起来像这样:
在你的 MvxWindow 中:

<WindowChrome.WindowChrome>
    <WindowChrome CaptionHeight="{x:Static SystemParameters.CaptionHeight}" ResizeBorderThickness="{x:Static SystemParameters.WindowResizeBorderThickness}" />
</WindowChrome.WindowChrome>

在window显示的视图中:

<Menu Height="{x:Static SystemParameters.WindowCaptionHeight}">
    <MenuItem Header="_Exit" WindowChrome.IsHitTestVisibleInChrome="True" />
</Menu>