自定义 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
为您需要的每个元素。
在 Window
或 View
中执行此操作基本上没有区别。您只需要留意您的 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>
如何在使用 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
为您需要的每个元素。
在 Window
或 View
中执行此操作基本上没有区别。您只需要留意您的 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>