2009-02-17 20 views
6

Sadece sürüm 2.0 kullanılarak Silverlight'a başlıyorum. Sayfada birkaç veri ızgarası göstermek istedim ve bunu her birini bir ızgara hücresine bırakarak tamamlamaya çalıştım. Sonra ben şu biçimlendirmeyi kullanarak bir ızgara ayırıcı eklemeyi deneyin düşündüm:Silverlight Izgara Splitter beklenmeyen davranış

<UserControl xmlns:basics="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls" xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" x:Class="SilverlightApplication1.Page" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
Loaded="UserControl_Loaded"> 
    <Grid x:Name="LayoutRoot" Background="White"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition></ColumnDefinition> 
      <ColumnDefinition Width="Auto"></ColumnDefinition> 
      <ColumnDefinition></ColumnDefinition> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition></RowDefinition> 
      <RowDefinition></RowDefinition> 
     </Grid.RowDefinitions> 
     <basics:GridSplitter Grid.RowSpan="2" Grid.Row="0" Grid.Column="1" HorizontalAlignment="Left" Width="5" VerticalAlignment="Stretch" ></basics:GridSplitter> 
     <data:DataGrid Name="TLGrid" Grid.Row="0" Grid.Column="0"> 
     </data:DataGrid> 
     <data:DataGrid Name="TRGrid" Grid.Row="0" Grid.Column="2"> 
     </data:DataGrid> 
     <data:DataGrid Name="BLGrid" Grid.Row="1" Grid.Column="0"> 
     </data:DataGrid> 
     <data:DataGrid Name="BRGrid" Grid.Row="1" Grid.Column="2"> 
     </data:DataGrid> 
    </Grid> 
</UserControl> 

diğer iki sütunu yeniden boyutlandırmak için etrafında splitter sürüklemek mümkün olması bekleniyor. Çubuğu sürüklediğimde, diğer sütunların ikisi de küçülüyor. Nedenini açıklayan var mı?

cevap

7

Sen GridSplitter için orta sütun gerekmez. Ayırıcıyı sütun 0'a koyarsanız Gridsplitter sütunun 0 sağ kenarına bağlanacaktır. Sol taraftaki ızgaralara küçük bir kenar boşluğu ekleyebilir, böylece son 5 pikseli kaybetmezsiniz. Hücreler Karşılaştığınız şekilde yeniden boyutlandırmak

<Grid x:Name="LayoutRoot" Background="White"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="1*"/> 
     <!--<ColumnDefinition Width="Auto"/>--> 
     <ColumnDefinition Width="1*"/> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="1*"/> 
     <RowDefinition Height="1*"/> 
    </Grid.RowDefinitions> 

    <data:DataGrid Name="TLGrid" Grid.Row="0" Grid.Column="0" /> 
    <data:DataGrid Name="BLGrid" Grid.Row="1" Grid.Column="0"/> 

    <!-- Moved the grid splitter to column 0 --> 
    <basics:GridSplitter Grid.RowSpan="2" Grid.Row="0" Grid.Column="0" Width="5" /> 

    <data:DataGrid Name="TRGrid" Grid.Row="0" Grid.Column="2" /> 
    <data:DataGrid Name="BRGrid" Grid.Row="1" Grid.Column="2" />   
</Grid> 
+0

Teşekkürler, bu mükemmel çalışıyor. –

8

nedeni aşağı ColumnDefinition değerleri ve GridSplitter arasında HorizontalAlignment etmektir. Bir yükseklik belirtmediğiniz için, sütun genişlikleri Yıldız olarak varsayılan değerlerdir. Bu eşit aralıklara sahip oldukları anlamına gelir. GridSplitterHorizontalAlignment, daha sonra yeniden boyutlandırdığı yönü belirtir. Ortaya ya da gerdirirseniz, her iki tarafı da yeniden boyutlandıracaksınız, ancak bir kenara ya da diğerine hizalarsanız, yalnızca bu kenarı yeniden boyutlandıracak, ancak hücreler eşit olarak alanı paylaştığından, her iki taraf da bir tane yerine büzülüyor. Kabul cevabı bu çalışma almak için alternatif bir yaklaşım sağlamaktadır rağmen sorun oluşur neden

, aslında açıklamaz. Kendi hücrelerinde bir ayırıcı koymak kesinlikle kabul edilebilir - aslında, genellikle tavsiye edilir.

+0

Açıklama için teşekkürler. Benim de sorunumu çözdü. – beaudetious

+0

@beaudetious: Yardım edebildiğime sevindim. :) –