2009-10-02 11 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이 발생합니다 ...

버튼을 클릭 할 때 수행 할 작업을 명령 패턴을 사용하여 알려줍니다. (난 그냥 GUI를 점화 작동하는지보고, 무엇을 주장하고 있지 않다)

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의를하고 (ObservableCollection에을위한 버튼을 생성 할 것들의 목록에 ItemsSource을 결합 수). DataTemplateItemsTemplate을 정의하여 각 항목이 원하는 여백과 명령 속성을 가진 버튼으로 표시되도록해야합니다. 여기

템플릿

WPF: Example of ItemsControl bound to an ObservableCollection

에 ItemsControl에 결합의 좋은 예