Задумывались ли вы о моделировании этого состояния с помощью конечного автомата?
В настоящий момент вся ваша работа обрабатывается в событии Click, но событие click должно быть простым при работе с конечным автоматом:
public class RunStateController
{
public RunState CurrentState { get; private set; }
public void Start()
{
// reset everything
Run();
}
public void Run()
{
State = new RunningState();
// do the running code here
}
public void Pause()
{
State = new PausedState();
// do the pause logic here
}
}
public abstract class RunState
{
public abstract void Change(RunStateContext context);
}
public class StartState : RunState
{
public override void Change(RunStateContext context)
{
context.Run();
}
}
public class RunningState : RunState
{
public override void Change(RunStateContext context)
{
context.Run();
}
}
public class Form....
{
private void cmdStart_Click(object sender, RoutedEventArgs e)
{
m_controller.CurrentState.Change();
}
}
В ответ на (2) - вы только что пытались обработать событие GotFocus и передать фокус прямо на элемент управления, на котором хотите сфокусироваться?