2009-10-02 192 views
1

我正在嘗試創建一個窗口,充當測試我正在處理的應用程序的開關板,並且遇到兩個問題。wpf動態窗口

第一個問題是試圖設置大小爲&需要動態添加到堆棧面板的按鈕邊距。在XAML中,屬性如下所示:

<StackPanel Name="_mainStackPanel" > 
    <Button Height="Auto" Width="Auto" Margin="10,10,10,5" >Do Something</Button> 
</StackPanel> 

第二個問題更棘手。我想開關板窗口有一個公開的屬性狀態欄,就像這樣:

<StatusBar BorderBrush="Black" BorderThickness="1" DockPanel.Dock="Left"> 
    <TextBlock Name="_statusBar" Foreground="Black" TextWrapping="Wrap">blah</TextBlock> 
</StatusBar> 

public string Status { 
     get { return _statusBar.Text; } 
     set { _statusBar.Text = value; } 
} 

在我工作通過測試的情況下,我只希望每個按鈕來顯示它在狀態欄中的文本內容當它被點擊時。調用點擊得到一個NullReferenceException ...

我使用命令模式來告訴按鈕當它被點擊時該做什麼。下面是開關板窗口中的代碼,其中的命令都變成按鈕:

private void _addButtons() { 
     foreach (var cmd in _commands) 
     { 
      var b = new Button 
        { 
         Content = cmd.DisplayText, 
         // height = "Auto" double.NaN ? 
         // width = "Auto" 
         // margin = "10,10,10,5 
        }; 
      var command = cmd; 
      b.Click += ((sender, args) => command.Execute()); 
      _mainStackPanel.Children.Add(b); 
     } 
    } 

這裏是我的「測試」的設置(我不主張什麼,只是發射了圖形用戶界面,看它是否工作) :

[TestFixture] 
public class SwitchBoardTests 
{ 
    private SwitchBoardView _switchboard; 
    private Application _app; 

    [SetUp] 
    public void SetUp() { 
     var commands = new List<IDisplayableCommand> { 
                 new StatusCommand("Hello...", _switchboard), 
                 new StatusCommand("Good Bye...", _switchboard), 
                }; 
     _switchboard = new SwitchBoardView(commands); 
    } 

    class StatusCommand : DisplayCommand 
    { 
     private readonly SwitchBoardView _view; 
     public StatusCommand(string message, SwitchBoardView view) : base(message) { 
      _view = view; 
     } 
     public override void Execute() { _view.Status = DisplayText; } 
    } 

    [Test] 
    public void Display() { 
     _app = new Application(); 
     _app.Run(_switchboard); 
     //_switchboard.Show(); 
    } 

} 

我剛學WPF,這樣可能會出來解決這兩個問題將是最歡迎的最佳做法!

乾杯,
Berryl

回答

2

對於動態添加的按鈕,你可以做一個的ItemsControl,而不是一個StackPanel和的ItemsSource綁定到你的事名單爲(的ObservableCollection創建按鈕)。您還需要DataTemplate爲您的列表定義ItemsTemplate,以便每個項目都顯示爲具有所需邊距和命令屬性的按鈕。

這裏是一個ItemsControl綁定到一個模板

WPF: Example of ItemsControl bound to an ObservableCollection

一個很好的例子