2014-09-01 29 views
0

我試圖給XAML中的某些控件添加邊框 - 問題是,每當我應用包裝某個元素時,它會包裹整個窗口,可能是在第一個網格元素上?WPF中的邊框包裝不正確的元素

當我嘗試在WebBrowser周圍使用它時,也會發生這種情況。有什麼建議麼?

<Window x:Class="WpfApplication2.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="RAT-t00l" Height="850" Width="700"> 
    <Grid x:Name="BigGrid" HorizontalAlignment="Right" Width="682"> 

     <TextBox Name="txt_Log" HorizontalAlignment="Left" Height="657" Margin="4,10,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="417" IsReadOnly="True"/> 
     <Button Name="btn" Click="btn_Connect_Click" Background="LightGreen" Content="Connect" HorizontalAlignment="Left" Margin="266,680,0,0" VerticalAlignment="Top" Width="75"/> 
     <Button Name="btn_disc" Click="btn_Disconnect_Click" Background="Pink" Content="Disconnect" HorizontalAlignment="Left" Margin="346,680,0,0" VerticalAlignment="Top" Width="75"/> 
     <Button Name="btn_fetch" Click="btn_Fetch_Click" Content="Fetch data" HorizontalAlignment="Left" Margin="266,707,0,0" VerticalAlignment="Top" Width="155" Height="24"/> 
     <Button Name="btn_eraseLog" Click="btn_EraseLog_Click" Content="Erase log from target" HorizontalAlignment="Left" Margin="266,736,0,0" VerticalAlignment="Top" Width="155" Height="25"/> 



      <WebBrowser 

      Name="map" 
        HorizontalAlignment="Left" 
        Height="347" 
        Margin="426,10,0,0" 
        VerticalAlignment="Top" 
        Width="246" 
        LoadCompleted="wb_LoadCompleted" 

        /> 
Here's the border. Meaning to wrap only the grid inside. 
 <Border Name="mask" CornerRadius="20" Height="auto" Width="auto" BorderThickness="1" BorderBrush="Black"> 
     <Grid x:Name ="GeneralGrid" Margin="426,362,10,291" ShowGridLines="True" Background="LightGray"> 

      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="61*" ></ColumnDefinition> 
       <ColumnDefinition Width="185*"></ColumnDefinition> 
      </Grid.ColumnDefinitions> 


      <Grid.RowDefinitions> 
       <RowDefinition></RowDefinition> 
       <RowDefinition></RowDefinition> 
       <RowDefinition></RowDefinition> 
       <RowDefinition></RowDefinition> 
       <RowDefinition></RowDefinition> 

      </Grid.RowDefinitions> 
      <TextBlock Name="IP">IP</TextBlock> 

      <TextBlock Name="ISP" Grid.Row="1">ISP</TextBlock> 
      <TextBlock Name="Location" Grid.Row="2">Location</TextBlock> 
      <TextBlock Name="Longitude" Grid.Row="3">Longitude</TextBlock> 
      <TextBlock Name="Latitude" Grid.Row="4">Latitude</TextBlock> 

     </Grid> 

    </Border> 

    </Grid> 

</Window> 
+0

邊框可能會'包裹'組件,但它也位於其父級中。它不會移動到兒童定位的位置,它按照通常的「Grid.Column」,「Grid.Row」,「Grid.ColumnSpan」,「Grid.RowSpan」和「Margin」屬性進行放置。看看你的邊界在「BigGrid」方面的位置。 – Mashton 2014-09-01 09:09:06

回答

0

我建議您不要像以前一樣繼續使用Visual Studio Designer。它在創建XAML方面做得很差,我們實際上是想要的。例如,你的用戶界面元素都得到了精確的Margin設置(感謝我設想的VS Designer),這會讓你以後的工作變得尷尬。

WPF的確被設計爲使開發人員能夠使用可調整大小的控件,以便在用戶調整應用程序大小時UI可以調整自己的大小。不同的Panel s爲其子控件提供了不同的大小調整功能,您可以在MSDN上的Panels Overview頁面找到更多關於它的信息。但是,回到您關於Grid class的問題。

因爲你已經使用了Visual Studio的設計師,你的控件已沒有在你想要的Grid細胞結束了,而不是隻是被「對」的頂部放置,或者「前面」他們。爲了將控件放入特定的Grid單元,您需要設置Grid.Row和/或Grid.Column附加屬性。請參閱從MSDN的最後一個鏈接頁取下的示例:

<Grid VerticalAlignment="Top" HorizontalAlignment="Left" ShowGridLines="True" Width="250" Height="100"> 
    <Grid.ColumnDefinitions> 
    <ColumnDefinition /> 
    <ColumnDefinition /> 
    <ColumnDefinition /> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
    <RowDefinition /> 
    <RowDefinition /> 
    <RowDefinition /> 
    <RowDefinition /> 
    </Grid.RowDefinitions> 

    <TextBlock FontSize="20" FontWeight="Bold" Grid.ColumnSpan="3" Grid.Row="0">2005 Products Shipped</TextBlock> 
    <TextBlock FontSize="12" FontWeight="Bold" Grid.Row="1" Grid.Column="0">Quarter 1</TextBlock> 
    <TextBlock FontSize="12" FontWeight="Bold" Grid.Row="1" Grid.Column="1">Quarter 2</TextBlock> 
    <TextBlock FontSize="12" FontWeight="Bold" Grid.Row="1" Grid.Column="2">Quarter 3</TextBlock> 
    <TextBlock Grid.Row="2" Grid.Column="0">50000</TextBlock> 
    <TextBlock Grid.Row="2" Grid.Column="1">100000</TextBlock> 
    <TextBlock Grid.Row="2" Grid.Column="2">150000</TextBlock> 
    <TextBlock FontSize="16" FontWeight="Bold" Grid.ColumnSpan="3" Grid.Row="3">Total Units: 300000</TextBlock> 
</Grid> 
+0

幾乎我所說的,但我同意謝里登學習操縱xaml直接幫助你長期。順便提一下,如果您在設計器中創建行和列(這可能是您沒有的,因爲沒有),您可以將元素放置在特定的單元格中,同時明智地使用單元上的右鍵單擊>佈局>重置 - 全部它在適當的單元格上。但是,這就是說,使用xaml仍然會給你更好的(更受控制的)體驗。您還可以使用拆分設計器來驗證您的xaml更改是否提供了所需的視覺設計。 – Mashton 2014-09-01 12:19:01

0

你似乎已經把所有BigGrid元素成佈局網格的單個細胞,而唯一從彼此的頂部出現的是阻止他們事實上你已經定義了利潤率。您尚未爲您的邊框定義保證金,但之後會爲其子女定義利潤率,這意味着它們將被抵消。

真的,爲了獲得最佳佈局,您希望儘可能避免邊距,並將BigGrid分成行和列。然後將你的用戶界面放入這些單元格如果您的邊框位於其自己的單元格內,則不會看起來包裹所有內容。