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

时间:2020-10-13 02:30:04

标签: c# wpf xaml mvvmcross window-chrome

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

我有这个:

<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的一部分,否则还会发生什么。调整大小甚至右键单击不可见的边框都可以。有什么方法可以不必在WindowChrome内重建整个View功能吗?

1 个答案:

答案 0 :(得分:0)

我会自己回答;
尽管使用 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>

在该窗口显示的视图内:

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