元素在最大化窗口上的位置

时间:2011-05-09 05:56:28

标签: .net wpf

我有一个WindowState="Maximized"的窗口(如果重要的话也是AllowsTransparency="True" Background="Transparent" WindowStyle="None")并且窗口左上角有一个Image元素。

但是实际的窗口。左侧位置= -8和window.Top = -8。

因此我的图像被裁剪为该值。

我做了这样的黑客以避免这个:

image1.Margin = new Thickness(-this.Left - 1, -this.Top - 1, 0, 0);

但是你可以看到它看起来很奇怪。将元素放在屏幕左上角的真实中的正确方法是什么?

3 个答案:

答案 0 :(得分:1)

我无法重现您的问题。

这是我试过的:

<Window x:Class="Test.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow"
        WindowState="Maximized">

    <Grid>
        <Image Source="E:\testImages\test.bmp" Stretch="None" VerticalAlignment="Top" HorizontalAlignment="Left" />
    </Grid>

</Window>
实际上,窗口的位置为(-8,-8),这是正常的,因为这是MS Windows“隐藏”窗口边界的方式......

但这意味着窗口的内容完美贴合屏幕,不会被裁剪,我的图像确实完全显示,并且完全对齐在屏幕的左侧和标题栏的右上方,没有进一步的麻烦。 / p>

如果我添加你的Hack,图像会得到给定的边距,这会使它从屏幕左侧开8px,从标题栏向下8xpx。

所以要么我错过了一些信息,要么你的问题不在那里


修改 的 我尝试了评论中链接的示例项目,发现问题在于窗口中的“allowsTransparency”设置为true。

为什么它表现得像这样,我不知道......

答案 1 :(得分:1)

您可以设置一个样式触发器,在窗口最大化时添加边距

<Window x:Class="Test.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow"
    WindowState="Maximized"
    AllowsTransparency="True" 
    WindowStyle="None" name="Window1">

<Grid>


<Grid.Style>
    <Style TargetType="{x:Type Grid}">
        <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=Window1, Path=WindowState}" Value="Maximized">
                <Setter Property="Margin" Value="5"/> // set your own values
            </DataTrigger>
        </Style.Triggers>
    </Style>
    </Grid.Style>




    <Image Source="E:\testImages\test.bmp" Stretch="None" VerticalAlignment="Top" HorizontalAlignment="Left" />
</Grid>

答案 2 :(得分:0)

尝试使用ViewBox。像这样:

<ViewBox>
  <Grid>
    <Image ..../>
  </Grid>
</ViewBox>

ViewBox将自动调整为图像大小,因此不会裁剪图像。