2017-03-24 54 views
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事件捕获?

+0

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

回答

1

放ResizeMode = “NoResize” 和SizeToContent = “WidthAndHeight”