我使用的是 WindowStyle None,我的导航栏是一个矩形,正常 WindowState 的 RadiusX 和 RadiusY 设置为 16,我希望在窗口最大化时它们为 0。
当我最大化时,我确实设法将它们变为 0,但是当之后恢复正常时,它们不会变回来。
这是我尝试过的:
if (WindowState == WindowState.Maximized)
{
WindowState = WindowState.Normal;
NavBar.RadiusX = 16;
NavBar.RadiusY = 16;
}
else
WindowState = WindowState.Maximized;
NavBar.RadiusX = 0;
NavBar.RadiusY = 0;
if (WindowState == WindowState.Normal)
{
WindowState = WindowState.Maximized;
NavBar.RadiusX = 0;
NavBar.RadiusY = 0;
}
else
WindowState = WindowState.Normal;
NavBar.RadiusX = 16;
NavBar.RadiusY = 16;
还复制导航栏矩形,更改半径并将其设置为隐藏在 XAML 中,并尝试在 C# 中切换可见性,如下所示:
if (WindowState == WindowState.Maximized)
{
WindowState = WindowState.Normal;
NavBarM.Visibility = Visibility.Hidden;
}
else
WindowState = WindowState.Maximized;
NavBarM.Visibility = Visibility.Visible;
这给了我与第一个相同的结果。
我们可以关闭这个问题吗?您已经收到了正确的评论,帮助您处理您的
if
块。我将添加一些完全不同的内容:这里的兴趣不是触及任何代码隐藏、视图模型,并且根本没有代码。毕竟,您想要的只是装饰细节。用它们污染代码可不太好。
让我们尝试用纯 XAML 来实现它:
<Window x:Class="SA.View.WindowMain"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="WindowMain" Height="450" Width="800">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Border BorderBrush="Black" BorderThickness="1"
Padding="10 4 10 4">
<TextBlock>Command bar</TextBlock>
<Border.Style>
<Style TargetType="Border">
<Style.Triggers>
<DataTrigger
Binding="{Binding WindowState,
RelativeSource=
{RelativeSource AncestorType=Window}}"
Value="Maximized">
<Setter Property="CornerRadius" Value="0"/>
<Setter Property="Margin" Value="0 0 0 4"/>
</DataTrigger>
<DataTrigger Binding="{Binding WindowState,
RelativeSource=
{RelativeSource AncestorType=Window}}"
Value="Normal">
<Setter Property="CornerRadius" Value="9"/>
<Setter Property="Margin" Value="8 4 8 4"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>
</Grid>
</Window>
这里,
RelativeSource
绑定用于处理来自其类型识别的父级Window
的属性更改事件。我还在两个数据触发器中添加了另一个 Setter
来更改条形边框边距,使其在角变圆时看起来更好。
我希望您不想再更改栏的可见性,但如果您愿意,您不需要数据触发器中的任何设置器,除了
<Setter Property="Visibility" Value="Collapsed"/>
<!-- ... -->
<!-- and -->
<Setter Property="Visibility" Value="Visible"/>
这样,您可以根据窗口状态更改栏的可见性,并且边框半径和其他属性可以是静态的,因为如果元素不可见,则不需要更改它们。