2011-05-09 64 views
3

我有一個窗口,其中WindowState="Maximized"(如果它很重要,它也是AllowsTransparency="True" Background="Transparent" WindowStyle="None"),窗口左上角有一個Image元素。元素在最大化窗口上的位置

但實際window.Left位置= -8和window.Top = -8。

因此我的形象被裁剪爲值。

我已經做出了這樣的黑客來避免這個:

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

但你可以看到它看起來非常怪異。將元素置於屏幕左上角的實際的正確方法是什麼?

+0

添加保證金?畫布,面板,網格?它是如何定位的?絕對的,相對的? – David 2011-05-09 09:17:59

+0

它在網格中。它被默認定位。 – zerkms 2011-05-09 09:25:07

回答

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),這是正常的,因爲這是微軟Windows的方式來「隱藏」窗口的邊框...

但是這意味着窗口的內容完美地適合屏幕,而不會被裁剪,而且我的圖像確實完全顯示,並且完美地與屏幕左側和標題欄右上方對齊,無需再費周折。

,如果我加入你的哈克,圖像獲取給定的保證金,而這個把它加上了8px直接從屏幕的左側,從標題欄8xpx下來。

所以無論我錯過了一些信息或發出不在於有


編輯: 我試着在評論鏈接的樣本項目,發現問題在於「AllowsTransparency」在窗口上設置爲true。

爲什麼它的行爲就是這樣,我不知道......

+0

這是一個問題,即使是你的樣品。下面是一個說明它的虛擬項目:http://dl.dropbox.com/u/4486681/WpfApplication2.7z – zerkms 2011-05-09 13:08:21

+0

有趣的是,我調試告訴我的罪魁禍首是「AllowsTransparency =真」 ......以「爲什麼」 ,我不知道... – David 2011-05-09 14:04:05

0

嘗試使用視框。就像這樣:

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

視框中會自動調整圖像尺寸,使圖像不會被裁剪。

+0

這不是我所問的。 – zerkms 2011-05-12 11:05:27

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>