2016-09-06 72 views
0

我剛剛從WinForms切換到WPF今天。
我現在面臨的問題是,在某個點之後,當我運行應用程序(在設計器中我看到所有內容)時,下面的所有內容都會被切斷。WPF窗體切斷一切點下面的所有內容

寬度爲1920,高度爲1080我使用WindowState="Maximized",也許這是爲什麼呢?

我想創建一個應用程序,全屏,但再次 - 某一點後,下面一切都被切斷,當我運行應用程序 我只是想將它們放在哪裏,併爲他們留沒有什麼特別的。那麼,也許不需要「網格」?
這裏的XMAL代碼:

<Window x:Class="KodeOS.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:KodeOS" 
    mc:Ignorable="d" 
    Title="KodeOS" Height="1080" Width="1920" WindowStartupLocation="CenterScreen" WindowState="Maximized" WindowStyle="None"> 
<Grid> 
    <Grid.Background> 
     <ImageBrush ImageSource="pack://siteoforigin:,,,/Resources/kdroid_wallpaper1.png"/> 
    </Grid.Background> 
    <Label x:Name="label" Content="KodeOS" HorizontalAlignment="Left" VerticalAlignment="Top" FontFamily="Segoe Print" FontSize="18.667" Margin="10,0,0,0" Foreground="White"/> 
    <Label x:Name="label1" Content="by Kamil" HorizontalAlignment="Left" Margin="10,24,0,0" VerticalAlignment="Top" FontFamily="Segoe Print" Foreground="White"/> 
    <Button x:Name="button" Content="After here everything will be cut off" HorizontalAlignment="Left" Margin="18,665,0,0" VerticalAlignment="Top" Width="255" RenderTransformOrigin="0.526,-0.807" Height="44"/> 
    <Button x:Name="button_Copy" Content="I'm past the cut off zone" HorizontalAlignment="Left" Margin="37,814,0,0" VerticalAlignment="Top" Width="179" RenderTransformOrigin="0.526,-0.807" Height="30"/> 

</Grid> 

+0

[這個簡單的教程可能有幫助](http://www.wpf-tutorial.com/panels/grid/) – nabulke

+0

@nabulke我不認爲添加網格將有所幫助。也許你可以嘗試運行它,看看問題是什麼?它也感覺像控制(按鈕,標籤等)的位置可能比我在設計師看到的更低? – Kamdroid

+0

你已經在你的例子中_had_ a'Grid'。鏈接解釋瞭如何正確使用它,以及爲什麼它現在產生錯誤的結果。 – nabulke

回答

0

我看不出有任何Grid.RowGrid.Column分配給您的控件,如標籤或按鈕。網格系統有點像Winform中的表格佈局。

通常以網格佈局,你不需要對準RenderTransformOrigin,Margns和垂直/水平對齊,只是建立一個適當的網格佈局應該做的元素。

您將您的元素(按鈕,標籤等)放入網格控件中。網格控件的工作方式是基於與這些元素相關聯的列/行值來排列所有項目,例如,將標籤放入行= 0,列= 0,將按鈕放入行= 0,列= 1)。如果您省略這些值,則將使用默認的行/列,其爲零。

這意味着,所有的元素將基本上重疊,但你已經成功地把它們彼此相距基於其他間隔屬性,如保證金/填充等,這是不是要走的路。

+0

我不太明白。爲什麼我需要爲我的控件分配'Grid.Row' /'Grid.Column'?如何?我還沒有在Winform中使用表格佈局。 – Kamdroid

+1

@Kamdroid澄清了答案,看看是否有幫助。這是基本的WPF佈局系統,如果你不熟悉,我建議閱讀一本書(或使用其他資源在你的處置),因爲它不完全像WinForms。 –

1

基本上你不通過定義邊距對齊網格內容 - 你需要專門的行和列分配給你的標籤/按鈕/無論

例如,這段代碼

<Grid Background="Gray"> 
    <Grid.RowDefinitions> 
     <RowDefinition></RowDefinition> 
     <RowDefinition></RowDefinition> 
    </Grid.RowDefinitions> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto"></ColumnDefinition> 
     <ColumnDefinition Width="Auto"></ColumnDefinition> 
    </Grid.ColumnDefinitions> 

    <Label x:Name="label" Grid.Column="0" Grid.Row="0" Content="KodeOS" HorizontalAlignment="Left" VerticalAlignment="Top" FontFamily="Segoe Print" FontSize="18.667" Foreground="White"/> 
    <Label x:Name="label1" Grid.Column="1" Grid.Row="0" Content="by Kamil" HorizontalAlignment="Left" VerticalAlignment="Top" FontFamily="Segoe Print" Foreground="White"/> 
    <Button x:Name="button" Grid.Column="0" Grid.Row="1" Content="After here everything will be cut off" HorizontalAlignment="Left" VerticalAlignment="Top" Width="255" Margin="5" Height="44"/> 
    <Button x:Name="button_Copy" Grid.Column="1" Grid.Row="1" Content="I'm past the cut off zone" HorizontalAlignment="Left" VerticalAlignment="Top" Width="179" Margin="5" Height="30"/> 

</Grid> 

會導致這樣的佈局: enter image description here

如果你想手動放置你的對象,你可以使用Canvas容器,你能在那裏將內容與Canvas.Left' and Canvas.Top`

例如:

<Canvas Background="Gray"> 

    <Label x:Name="label" Canvas.Left="25" Canvas.Top="5" Content="KodeOS" HorizontalAlignment="Left" VerticalAlignment="Top" FontFamily="Segoe Print" FontSize="18.667" Foreground="White"/> 
    <Label x:Name="label1" Canvas.Left="55" Canvas.Top="55" Content="by Kamil" HorizontalAlignment="Left" VerticalAlignment="Top" FontFamily="Segoe Print" Foreground="White"/> 
    <Button x:Name="button" Canvas.Left="75" Canvas.Top="125" Content="After here everything will be cut off" HorizontalAlignment="Left" VerticalAlignment="Top" Width="255" Margin="5" Height="44"/> 
    <Button x:Name="button_Copy" Canvas.Left="125" Canvas.Top="205" Content="I'm past the cut off zone" HorizontalAlignment="Left" VerticalAlignment="Top" Width="179" Margin="5" Height="30"/> 

</Canvas> 

會變成這樣: enter image description here

不過一般我不會去說,因爲你不能在窗口動態響應 - 大小變化

+0

謝謝,但我打算將其創建爲全屏(最大化)的WPF應用程序。我不需要以任何特殊的方式來定位控件,我只是想把它們放在任何地方,讓它們留在那裏。高度爲1080,寬度爲1920(我的屏幕分辨率),窗口狀態最大化。在設計師中,一切都看起來不錯,但是當我運行任何低於某點的東西時,它會被切斷,任何幫助? – Kamdroid

+0

如果只有你會使用該程序,那沒關係。但如果其他人使用它,他們的解析度甚至可能達到800x600,然後他們甚至不會看到你的窗口的一半。 – mcy