2016-09-25 52 views
-1

我有網格線對他如此說:如何引用佈局的兒童在課堂上的WPF

<Grid Name="sGrid" Height="650" Width="205" Margin="0,25"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="35"/> 
     </Grid.ColumnDefinitions> 
     <TextBlock Name="minSpeed" HorizontalAlignment="Left" TextWrapping="Wrap" Text="min speed" VerticalAlignment="Bottom" Grid.Column="0" Grid.Row="0"/> 

我送這個網格的副本上我的課是這樣的:

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     sClass sObject = new sClass(sGrid); 
    }}; 

得到它在我的課這樣的:

public class sClass 
{ 
    public sClass(Grid Xi_Sgrid) 
    { 
     sGrid = Xi_Sgrid; 
     sGraphHeight = sGrid.RowDefinitions[0].ActualHeight; 
     sGraphWidth = sGrid.ColumnDefinitions[0].ActualWidth;; 
     sGrid.minSpeed // can't find in the intellisense 

    } 

現在的前三行sClass是確定的,但第三特羅是非法的。 什麼是正確的方式來參考從一個班的佈局兒童? 謝謝。

+0

的可能的複製[?如何獲得其在C#中相同的父WPF沒有它的名字proprty的其他控制(http://stackoverflow.com/questions/39683496/如何獲得其他控制的wpf-having-same-parent-in-c-sharp-without-na-na) –

+1

這裏有太多可能的答案。但短版是「你不要」。你不應該直接操縱UI元素。相反,將您的程序基於視圖模型,將適當的屬性綁定到UI元素屬性,以便將它們呈現給用戶。如果你堅持不這樣做,那麼考慮到你已經顯示的代碼,我會說你應該將'minSpeed'和'sGrid'引用一起傳遞給'sClass'構造函數。如果你做錯了,至少做錯了,而不是讓自己變得很難。 –

回答

0

您必須在Grid上使用FindName方法。看看下面的示例代碼幫助:

TextBlock minSpeed = sGrid.FindName("minSpeed") as TextBlock; 
if (minSpeed != null) 
{ 
    // do something with minSpeed 
} 
+0

@PeterDuniho我錯誤鍵入了svpGrid而不是sGrid。感謝有一個變量的建議,我更新了我的代碼, – sachin