WPF 中可调整大小的对话框 window
Resizable dialog window in WPF
我使用 Mahapps 的 MetroWindow class 来显示某种对话框 window。
我的想法是创建可自动调整大小的 window,以适应其内容大小
<controls:MetroWindow
...
DataContext="{Binding DialogVM, Source={StaticResource ViewModelLocator}}"
Title="{Binding WindowHeader}"
WindowTitleBrush="{StaticResource MainStyleTitleBrush}"
Background="{StaticResource MainStyleBackgroundBrush}"
wpfExtensions:SizeObserver.Observe="True"
wpfExtensions:SizeObserver.ObservedWidth="{Binding xHeight, Mode=OneWayToSource}"
wpfExtensions:SizeObserver.ObservedHeight="{Binding xWidth, Mode=OneWay}"
MaxWidth="1110" MaxHeight="1080"
MinWidth="450" MinHeight="600"
ShowMinButton="False"
ShowMaxRestoreButton="False"
BorderThickness="1"
BorderBrush="{StaticResource MainStyleBorderBrush}"
SizeToContent="Width"
WindowStartupLocation="CenterScreen">
<Grid>
<ContentPresenter Content="{Binding VM}"/>
</Grid>
</controls:MetroWindo>
但我有两个问题
第一个:我的 window 受到用户操作的影响(鼠标双击标题,将 window 拖动到屏幕的左边缘或右边缘,等等),我希望它被冻结,但可以调整大小。
第二个:当我再次重新显示相同的 window 时(没有重新创建它,但新内容可以具有新的可见大小)它显示在最后一个位置。
如何在不捕获 code-behind WindowSizeChanged 事件的情况下解决这个问题?
将 ResizeMode="NoResize" 和 SizeToContent="WidthAndHeight"
我使用 Mahapps 的 MetroWindow class 来显示某种对话框 window。 我的想法是创建可自动调整大小的 window,以适应其内容大小
<controls:MetroWindow
...
DataContext="{Binding DialogVM, Source={StaticResource ViewModelLocator}}"
Title="{Binding WindowHeader}"
WindowTitleBrush="{StaticResource MainStyleTitleBrush}"
Background="{StaticResource MainStyleBackgroundBrush}"
wpfExtensions:SizeObserver.Observe="True"
wpfExtensions:SizeObserver.ObservedWidth="{Binding xHeight, Mode=OneWayToSource}"
wpfExtensions:SizeObserver.ObservedHeight="{Binding xWidth, Mode=OneWay}"
MaxWidth="1110" MaxHeight="1080"
MinWidth="450" MinHeight="600"
ShowMinButton="False"
ShowMaxRestoreButton="False"
BorderThickness="1"
BorderBrush="{StaticResource MainStyleBorderBrush}"
SizeToContent="Width"
WindowStartupLocation="CenterScreen">
<Grid>
<ContentPresenter Content="{Binding VM}"/>
</Grid>
</controls:MetroWindo>
但我有两个问题 第一个:我的 window 受到用户操作的影响(鼠标双击标题,将 window 拖动到屏幕的左边缘或右边缘,等等),我希望它被冻结,但可以调整大小。 第二个:当我再次重新显示相同的 window 时(没有重新创建它,但新内容可以具有新的可见大小)它显示在最后一个位置。
如何在不捕获 code-behind WindowSizeChanged 事件的情况下解决这个问题?
将 ResizeMode="NoResize" 和 SizeToContent="WidthAndHeight"