2013-03-06 109 views
2

因此,這是我第一次在VS 2012中爲Windows桌面使用wpf應用程序。 我把一些背景圖片放在一個窗口中。我把三個文本框和一個按鈕放在窗口上。現在我遇到了一個問題,當我啓動應用程序並使用鼠標或全屏更改窗口大小時,窗口會更改其大小,但文本框和按鈕與以前保持相同的位置,並且它們不適合那個設計。我希望我很清楚。感謝您的幫助。WPF應用程序更改大小

<Window x:Class="WpfApplication2.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="768" Width="1366 
    "> 

<Grid RenderTransformOrigin="0.495,0.498" Margin="0,10,0,0"> 
    <Grid.Background> 
     <ImageBrush ImageSource="slike/education_board.jpg"/> 
    </Grid.Background> 
    <Grid HorizontalAlignment="Left" Height="209" Margin="209,211,0,0"  VerticalAlignment="Top" Width="396"> 

    <TextBox x:Name="tockeMaturaTextBox" HorizontalAlignment="Left" Height="23" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Bottom" Width="120" TextChanged="TextBox_TextChanged_1" IsManipulationEnabled="True" Margin="10,0,0,176"/> 
    <TextBox x:Name="tretjiLetnikTextBox" HorizontalAlignment="Left" Height="23" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120" RenderTransformOrigin="0.899,3.574" Margin="10,63,0,0"/> 
    <TextBox x:Name="cetrtiLetnikTextBox" HorizontalAlignment="Left" Height="23" Margin="10,115,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120"/> 
    <Button x:Name="button" Content="Button" HorizontalAlignment="Left" Margin="361,224,0,0" VerticalAlignment="Top" Width="75" Click="button_Click"/> 
    <TextBlock x:Name="skupneTockeTextBlock" HorizontalAlignment="Left" Margin="323,133,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top"  RenderTransformOrigin="-0.375,0.338" Height="73" Width="113"/> 

    </Grid> 
</Grid> 
</Window> 
+0

請提供代碼 – Dom 2013-03-06 18:48:10

+0

我添加代碼:d – user2090925 2013-03-06 18:50:51

+0

如果您從文本框中取出保證金性質,他們將免費根據需要更改位置。把它們放在一個StackPanel裏面,然後它們會自動垂直堆疊。 – Stewbob 2013-03-06 18:59:05

回答

4

給這個XAML以下嘗試:

<Grid Margin="0,10,0,0"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="211"/> 
      <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*"/> 
      <ColumnDefinition Width="Auto"/> 
     </Grid.ColumnDefinitions> 
     <Grid.Background> 
      <ImageBrush ImageSource="slike/education_board.jpg"/> 
     </Grid.Background> 
     <StackPanel Grid.Row="1" Grid.Column="1" > 

      <TextBox x:Name="tockeMaturaTextBox" Margin="0,5" HorizontalAlignment="Left" Height="23" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Bottom" Width="120" TextChanged="TextBox_TextChanged_1" IsManipulationEnabled="True" /> 
      <TextBox x:Name="tretjiLetnikTextBox" Margin="0,5" HorizontalAlignment="Left" Height="23" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120" /> 
      <TextBox x:Name="cetrtiLetnikTextBox" Margin="0,5" HorizontalAlignment="Left" Height="23" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120"/> 
      <Button x:Name="button" Margin="5" Content="Button" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" Click="button_Click"/> 
      <TextBlock x:Name="skupneTockeTextBlock" Margin="5" HorizontalAlignment="Left" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top"  Height="73" Width="113"/> 

     </StackPanel> 
    </Grid> 

WPF使用基於容器的(相對)佈局系統。您通過相對於父網格精確定義邊距,將文本框置於絕對位置。在上面的例子中,它們被放置在網格內的StackPanel中。

有了所有額外的邊距和絕對寬度和高度,很難說出您最終的結果,但上面的XMAL應該讓您接近。您可以更改網格行和列的相對大小以獲取所需內容;或完全重新定義Grid的結構。

我認爲WPF的一個很好的教程是爲了得到基本概念的處理: Silverlight/WPF Introduction。這是針對Silverlight的,但佈局原則與WPF完全相同。實際訓練從視頻中的8點17分開始。

編輯 對於神奇的擴縮內容,使用下面的代碼:

<Grid Margin="0,10,0,0"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="1*"/> 
      <RowDefinition Height="1*"/> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="2*"/> 
      <ColumnDefinition Width="1*"/> 
     </Grid.ColumnDefinitions> 
     <Grid.Background> 
      <ImageBrush ImageSource="slike/education_board.jpg"/> 
     </Grid.Background> 
     <Viewbox Grid.Row="1" Grid.Column="1" > 
      <StackPanel> 
       <TextBox x:Name="tockeMaturaTextBox" Margin="0,5" HorizontalAlignment="Left" Height="23" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Bottom" Width="120" TextChanged="TextBox_TextChanged_1" IsManipulationEnabled="True" /> 
       <TextBox x:Name="tretjiLetnikTextBox" Margin="0,5" HorizontalAlignment="Left" Height="23" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120" /> 
       <TextBox x:Name="cetrtiLetnikTextBox" Margin="0,5" HorizontalAlignment="Left" Height="23" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="120"/> 
       <Button x:Name="button" Margin="5" Content="Button" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" Click="button_Click"/> 
       <TextBlock x:Name="skupneTockeTextBlock" Margin="5" HorizontalAlignment="Left" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top"  Height="73" Width="113"/> 
      </StackPanel> 
     </Viewbox> 
    </Grid> 
+1

謝謝,這工作正常。我也試圖實現,當我移動,或者我應該說調整這種形式,那些文本框會調整大小,或與背景圖片一起移動,但他們不.. .. – user2090925 2013-03-06 19:16:35

+0

我不知道你是否理解我,我真的不知道如何解釋,我希望我的apllication在全屏和窗口中看起來是一樣的..只有在窗口中它都是更小.. – user2090925 2013-03-06 19:20:12

+0

哦,那很容易。只需將所有內容放入Viewbox即可。請參閱編輯。 – Stewbob 2013-03-06 19:25:54

相關問題