2014-04-03 108 views
0

我正在WPF應用程序上工作,當我按下該按鈕時,我想將按鈕切換到文本框。我嘗試隱藏按鈕並在點擊代碼時更改文本框的邊距,但邊距不變。 那我該怎麼辦?切換按鈕到文本框

private void sh_Click_1(object sender, RoutedEventArgs e) 
{ 
    TextBox t = new TextBox(); 
    Button b = new Button(); 
    b = sb; 
    t = valeur; 
    b.Visibility = Visibility.Hidden; 
    t.Margin = new Thickness(2, 2, 4, 2); 
    t.Visibility = Visibility.Visible;   
} 
+4

這些控件是本函數的局部變量。它們不會添加到可視化樹中。你想做什麼?這是你的實際代碼嗎?這段代碼不會做任何事情。 –

+0

Valeur和sb是在xaml代碼中聲明的變量。當我按下按鈕的文本框變得可見我只想把它放在按鈕的位置 –

+0

更改b.visibility = visibility.hidden到 sb.visibility = visibility.collapsed(隱藏原始按鈕) – Chris

回答

2

你應該做的是將文本框添加到XAML,然後直接引用它來顯示/隱藏按鈕和文本框。

XAML:

<Button x:Name="sh" Click="sh_Click_1"/> 
<TextBox x:Name="valeur" Visibility="Collapsed"/> 

C#:

private void sh_Click_1(object sender, RoutedEventArgs e) 
{ 
    sh.Visibility = Visibility.Collapsed; 
    valeur.Visibility = Visibility.Visible;   
} 
+0

該按鈕和文本框已經在XAML代碼中。 –

+0

然後像他們那樣引用它們,它會正常工作。你不需要在 – DLeh

0

你梅索德不會工作,因爲你永遠不新texbox添加到可視化樹。 您可以獲取按鈕的屬性(內容,寬度,高度等),因爲這是「發件人」。

例如,如果你按鈕在網格:

private void sh_Click_1(object sender, RoutedEventArgs e) 
    { 
     var button = sender as Button; 
     if (button != null) 
     { 
      TextBox texbox = new TextBox(); 
      texbox.Width = button.ActualWidth; 
      texbox.Height = button.ActualHeight; 
      texbox.Text = button.Content.ToString(); 
      button.Visibility = Visibility.Collapsed; 
      ((Grid)button.Parent).Children.Add(texbox); 
      Grid.SetRow(texbox, Grid.GetRow(button)); 
      Grid.SetColumn(texbox, Grid.GetColumn(button)); 
     } 
    } 

編輯:如果你已經在XAML的文本框,你不需要緊迫性多了一個文本框像我的例子。您只需將可見性設置爲可見即可。

+0

後面的代碼中創建一個新的按鈕和文本框,這太複雜了,並且在代碼隱藏中創建控件是一個糟糕的做法。 – DLeh

+0

我不知道他已經有了XAML中的文本框。 –

+0

他對此確實不清楚,但除非有明確的理由從代碼隱藏創建控件,否則應該不鼓勵。 – DLeh