2017-07-27 130 views
1

我制作了一个图片查看器,它是WindowSizeToContent="Width"。当我用系列中的第一张照片打开时,这看起来就是我想要的方式。防止内容更改时窗口的自动调整大小

当我浏览系列中的下一张照片时,发现照片的宽度比上一张更宽,Window的大小调整为适合此新照片。 Window的左边缘保持在同一位置,但Window的右边缘现在位于屏幕边缘之外。

如何防止这种自动调整大小?

我不想使用ResizeMode="NoResize",因为我希望用户能够根据自己的需要手动更改Window的大小。

XAML

<Window SizeToContent="Width" WindowStartupLocation="CenterOwner"> 
    <Grid> 
     <DockPanel> 
      <Button DockPanel.Dock="Left" 
        Content="Previous" /> 
      <Button DockPanel.Dock="Right" 
        Content="Next" /> 
      <Image Source="{Binding CurrentImage}" 
        Stretch="Uniform" 
        StretchDirection="DownOnly" 
        RenderOptions.BitmapScalingMode="Fant" /> 
     </DockPanel> 
    </Grid> 
</Window> 
+0

删除'SizeToContent = “宽度”'。也许你真正的问题是,“我正在调整我的窗口的内容,因为[列表原因]。这很糟糕,因为窗口不断调整大小,因为我显示不同的图像。这是我的XAML [白色]。我怎样才能达到[理由]行为?” – Will

+0

如果我删除'SizeToContent',窗口总是太大。我希望窗口大小适当,以便第一个图像正确显示,然后不再调整大小(除非通过用户交互)。 'SizeToContent'精美地完成了第一个。 – GTHvidsten

+0

@GTHvidsten如果是这样的话,你可以通过代码获得第一个图像的宽度并将其应用到启动窗口 –

回答

3

重置在Loaded事件处理的SizeToContent属性:

public MainWindow() 
{ 
    InitializeComponent(); 

    Loaded += (o, e) => SizeToContent = SizeToContent.Manual; 
} 

或者,如果你不喜欢背后代码:

<Window.Triggers> 
    <EventTrigger RoutedEvent="Loaded"> 
     <BeginStoryboard> 
      <Storyboard> 
       <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="SizeToContent"> 
        <DiscreteObjectKeyFrame KeyTime="0" 
              Value="{x:Static SizeToContent.Manual}"/> 
       </ObjectAnimationUsingKeyFrames> 
      </Storyboard> 
     </BeginStoryboard> 
    </EventTrigger> 
</Window.Triggers> 
+0

这似乎按照我的意图工作。当然,我现在还有其他尺寸问题,但与他们无关。谢谢。 – GTHvidsten

相关问题