0
我使用Mahapps的MetroWindow类来显示某种对话窗口。 我的想法是创建自动改变大小的窗口,以适应其内容的大小WPF中可调整大小的对话框窗口
<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>
但我有两个问题 第一个:我的窗口被影响到的用户操作(在标题鼠标双击,拖动窗口到左或右屏幕边缘等),我希望它被冻结,但可以调整大小。第二个:当我再次重新显示相同的窗口(没有重新创建它,但是新的内容可以有新的可见尺寸)时,它显示了它的最后位置。
我该如何解决这个问题,而无需代码隐藏WindowSizeChanged事件捕获?
1)你需要设置'WindowStyle = None'是将 '禁用' 窗口的标题,但会离开它调整大小。 2)添加一个'Border'(填充一些颜色),内部'Label'就是你'标题' 3)你可以使用Window的属性[Top](https://msdn.microsoft.com/ru -ru/library/system.windows.window.top(v = vs.110).aspx)和[Left](https://msdn.microsoft.com/ru-ru/library/system.windows.window.left (v = vs.110).aspx)来存储窗口的位置。 – Shakra